Sign In
Free Sign Up
  • English
  • Español
  • 简体中文
  • Deutsch
  • 日本語
Sign In
Free Sign Up
  • English
  • Español
  • 简体中文
  • Deutsch
  • 日本語

Skalierbarkeit in der LLM-App-Entwicklung mit einer leistungsstarken Vektordatenbank

# Einführung

Leistungsstarke Sprachmodelle wie GPT3.5-turbo und GPT4 haben die App-Entwicklung revolutioniert und zu einem Anstieg von domänenspezifischen Anwendungen geführt. Herausragende Apps wie PandaGPT und GiftWarp zeigen die Fähigkeiten dieser Modelle. Was diese Apps auszeichnet, ist ihre außergewöhnliche Datenverarbeitung. PandaGPT kann beispielsweise nahtlos Informationen aus Hunderten von PDF-Dokumenten abrufen. Dadurch ist PandaGPT für den Wettbewerb auf dem App-Markt gut positioniert.

Um eine langfristige Funktionsfähigkeit sicherzustellen, müssen Unternehmer die Skalierung der Datenverarbeitung priorisieren. Mit zunehmender Beliebtheit von Apps wird eine effiziente Datenverarbeitung immer wichtiger. Eine robuste Infrastruktur und skalierbare Systeme sind entscheidend, um die steigenden Datenlasten zu bewältigen. Indem Engpässe behoben und eine reibungslose Erweiterung geplant wird, positionieren Unternehmer ihre Apps für Wachstum und Benutzerzufriedenheit.

Eine datengetriebene Herangehensweise bietet beispiellose Möglichkeiten. Mit Sprachmodellen wie GPT3.5-turbo und GPT4 können Entwickler das Potenzial für bahnbrechende Innovationen und außergewöhnliche Benutzererlebnisse ausschöpfen. Durch die Nutzung der Leistung dieser Modelle erreicht die App-Entwicklung neue Höhen. Die Zukunft liegt in datengetriebenen Lösungen und der Nutzung fortschrittlicher Sprachmodelle für transformative Erlebnisse.

# Planung der Skalierbarkeit von Anfang an

Mit Hilfe der OpenAI-API können wir mühelos einen Kundenservice-Chatbot erstellen, indem wir GPT und eine geringe Menge an Produktinformationen nutzen. Indem wir GPT verwenden, um Anfragen zu analysieren, können wir effizient nach Elementen in einer gegebenen Liste suchen und beeindruckende Ergebnisse erzielen. Hier ist ein Beispiel:

import os
import openai
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # lokale .env-Datei lesen

openai.api_key  = os.environ['OPENAI_API_KEY']

delimiter = "####"
system_message = f"""
Follow these steps to answer the customer queries.
The customer query will be delimited with four hashtags,
i.e. {delimiter}. 

Step 1:{delimiter} First decide whether the user is 
asking a question about a specific product or products. 
Product cateogry doesn't count. 

Step 2:{delimiter} If the user is asking about 
specific products, identify whether 
the products are in the following list.
All available products: 
1. Product: TechPro Ultrabook
   Category: Computers and Laptops
   Brand: TechPro
   Model Number: TP-UB100
   Warranty: 1 year
   Rating: 4.5
   Features: 13.3-inch display, 8GB RAM, 256GB SSD, Intel Core i5 processor
   Description: A sleek and lightweight ultrabook for everyday use.
   Price: $799.99

2. Product: BlueWave Gaming Laptop
   Category: Computers and Laptops
   Brand: BlueWave
   Model Number: BW-GL200
   Warranty: 2 years
   Rating: 4.7
   Features: 15.6-inch display, 16GB RAM, 512GB SSD, NVIDIA GeForce RTX 3060
   Description: A high-performance gaming laptop for an immersive experience.
   Price: $1199.99

3. Product: PowerLite Convertible
   Category: Computers and Laptops
   Brand: PowerLite
   Model Number: PL-CV300
   Warranty: 1 year
   Rating: 4.3
   Features: 14-inch touchscreen, 8GB RAM, 256GB SSD, 360-degree hinge
   Description: A versatile convertible laptop with a responsive touchscreen.
   Price: $699.99
 ......
 
Step 3:{delimiter} If the message contains products 
in the list above, list any assumptions that the 
user is making in their 
message e.g. that Laptop X is bigger than 
Laptop Y, or that Laptop Z has a 2 year warranty.

Step 4:{delimiter}: If the user made any assumptions, 
figure out whether the assumption is true based on your 
product information. 

Step 5:{delimiter}: First, politely correct the 
customer's incorrect assumptions if applicable. 
Only mention or reference products in the list of 
5 available products, as these are the only 5 
products that the store sells. 
Answer the customer in a friendly tone.

Use the following format:
Step 1:{delimiter} <step 1 reasoning>
Step 2:{delimiter} <step 2 reasoning>
Step 3:{delimiter} <step 3 reasoning>
Step 4:{delimiter} <step 4 reasoning>
Response to user:{delimiter} <response to customer>

Make sure to include {delimiter} to separate every step.
"""

user_message = f"""
how much is the BlueWave Chromebook more expensive 
than the TechPro Desktop"""

messages =  [  
{'role':'system', 
 'content': system_message},    
{'role':'user', 
 'content': f"{delimiter}{user_message}{delimiter}"},  
] 

response = get_completion_from_messages(messages)
print(response)

Wenn ein Startup einen Kundenservice-Chatbot entwickeln möchte, der Multimodalität integriert und einen größeren Datensatz verwendet, ist eine Vektordatenbank erforderlich, um ihren Anforderungen gerecht zu werden. Die Implementierung einer Vektordatenbank in diesem Stadium ist entscheidend für eine effektive Datenverwaltung und -abfrage.

Um dieses Ziel zu erreichen, können wir eine Vektordatenbank nutzen, die speziell für die Verarbeitung hochdimensionaler Daten entwickelt wurde, einschließlich multimodaler Informationen. Mit einer Vektordatenbank können wir Vektoren speichern und indizieren, die verschiedene Aspekte von Kundenservicedaten repräsentieren, wie z.B. Text, Bilder oder sogar Audio.

Wenn ein Kunde eine Anfrage an den Chatbot sendet, kann das System mithilfe von Natural Language Processing-Techniken den Text in eine Vektorrepräsentation umwandeln. Diese Vektorrepräsentation kann dann verwendet werden, um in der Vektordatenbank nach relevanten Antworten zu suchen. Wenn der Chatbot auch in der Lage ist, Bild- oder Audioeingaben zu verarbeiten, können diese Eingaben ebenfalls in Vektorrepräsentationen umgewandelt und in der Datenbank gespeichert werden.

Die Vektordatenbank indiziert die Vektoren effizient und ermöglicht eine schnelle Abfrage relevanter Informationen. Durch die Nutzung fortschrittlicher Suchalgorithmen wie der Suche nach dem nächsten Nachbarn kann der Chatbot anhand von Ähnlichkeitsmetriken zwischen der Anfrage des Benutzers und den gespeicherten Vektoren in der Datenbank die passendsten Antworten identifizieren.

Mit dem Wachstum des Datensatzes gewährleistet die Vektordatenbank Skalierbarkeit und effiziente Speicherung multimodaler Daten. Sie vereinfacht den Prozess der Aktualisierung und Erweiterung des Datensatzes, sodass der Chatbot seine Leistung kontinuierlich verbessern und genaue und relevante Antworten auf Kundenanfragen liefern kann.

Boost Your AI App Efficiency now
Sign up for free to benefit from 150+ QPS with 5,000,000 vectors
Free Trial
Explore our product

# Abwägung von Skalierbarkeit und Kosteneffizienz

Startups müssen auch die Kosteneffizienz berücksichtigen, während sie Skalierbarkeit erreichen. Die Strukturierung und Vorverarbeitung von Daten zur Extraktion relevanter Merkmale und Attribute kann dazu beitragen, Speicher- und Verarbeitungsanforderungen zu reduzieren und Kosten zu minimieren. Die Nutzung vorhandener Tools und Frameworks mit multimodalen Fähigkeiten kann ebenfalls wertvolle Zeit und Ressourcen sparen. Diese Ressourcen bieten oft optimierte Datenstrukturen und Algorithmen, sodass nicht alles von Grund auf neu entwickelt werden muss.

Bei der Wahl einer Datenbank sollten Startups MyScale als kostengünstige Lösung in Betracht ziehen. MyScale ist eine dichte und kosteneffiziente Vektordatenbank, die im Vergleich zu anderen Optionen eine hohe Leistung zu geringeren Kosten bietet. Durch die Umsetzung von Strategien wie der Strukturierung und Vorverarbeitung von Daten, der Nutzung vorhandener Tools und Frameworks sowie der Berücksichtigung kosteneffizienter Lösungen wie MyScale können Startups eine Balance zwischen Skalierbarkeit und Kosteneffizienz finden. Diese Ansätze optimieren die Leistung und nutzen die verfügbaren Ressourcen optimal, sodass Startups auf kosteneffiziente Weise wachsen und erfolgreich sein können.

Join Our Newsletter

# Fallstudien und bewährte Verfahren

Hier geben wir eine kurze Einführung, wie MyScale verwendet werden kann, um einen multimodalen Kundenservice-Chatbot schnell zu skalieren. Zu diesem Zweck haben wir einen vereinfachten Datensatz aus Taobao Live (opens new window) verwendet.

# Installation der Voraussetzungen

  • transformers: Ausführen des CLIP-Modells
  • tqdm: Schöne Fortschrittsanzeige für Menschen
  • clickhouse-connect: MyScale-Datenbankclient
python3 -m pip install transformers tqdm clickhouse-connect streamlit pandas lmdb torch

# Einstieg in die Daten

Zunächst werfen wir einen Blick auf die Struktur der Datensätze. Wir haben die Daten in zwei Tabellen aufgeteilt.

id product_url label
102946 url_to_store_the image Men's Long Sleeve Shirt

Der Datensatz besteht aus drei Spalten: Produkt-ID, Produktbild und Label. Die erste Spalte dient als eindeutiger Bezeichner für jedes Produktbild. Die zweite Spalte enthält die URL zum Bild. Die dritte Spalte ist das Label des Produkts. Hier ist ein Beispiel für die oben genannte Spalte "product_url":

id product_text label
102946 POOF C(1's)I MOCK NECK POCKET TEE Men's Long Sleeve Shirt

# Erstellen einer MyScale-Datenbanktabelle

# Arbeiten mit der Datenbank

Um eine Tabelle in MyScale zu erstellen, benötigen Sie eine Verbindung zu einem Datenbank-Backend. Eine detaillierte Anleitung für den Python-Client finden Sie auf dieser Seite (opens new window).

Wenn Sie mit SQL (Structured Query Language) vertraut sind, wird es Ihnen viel leichter fallen, mit MyScale zu arbeiten. MyScale kombiniert die strukturierte Abfrage mit der Vektorsuche, was bedeutet, dass das Erstellen einer Vektordatenbank fast genauso funktioniert wie das Erstellen konventioneller Datenbanken. Hier ist, wie wir zwei Vektortabellen in SQL erstellen:

CREATE TABLE IF NOT EXISTS TaoBaoData_image(
        id String,
        vector Array(Float32),
        CONSTRAINT vec_len CHECK length(vector) = 512
        ) ENGINE = MergeTree ORDER BY id; 
        
CREATE TABLE IF NOT EXISTS TaoBaoData_text(
        id String,
        vector Array(Float32),
        CONSTRAINT vec_len CHECK length(vector) = 512
        ) ENGINE = MergeTree ORDER BY id; 

# Extrahieren von Merkmalen und Befüllen der Datenbank

CLIP (opens new window) ist eine beliebte Methode, die Daten aus verschiedenen Formen (wir verwenden den akademischen Begriff "Modalität") in einen einheitlichen Raum überführt und eine leistungsstarke kreuzmodale Suche ermöglicht. Dieses Modell kann sowohl Bilder als auch Texte codieren. Hier ist ein Beispiel:

import torch
import clip
from PIL import Image

# Laden des CLIP-Modells
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

# Laden und Vorverarbeiten des Bildes
image_path = "path_to_your_image.jpg"
image = Image.open(image_path).convert("RGB")
image_input = preprocess(image).unsqueeze(0).to(device)

# Codieren des Bildes
with torch.no_grad():
    image_features = model.encode_image(image_input)

# Codieren des Textes
text = "Your text here"
text_input = clip.tokenize([text]).to(device)
with torch.no_grad():
    text_features = model.encode_text(text_input)

# Ausgabe der Bild- und Textmerkmale
print("Image features shape:", image_features.shape)
print("Text features shape:", text_features.shape)

# Hochladen der Daten in MyScale

Sobald die Daten in Einbettungen verarbeitet wurden, können wir die Daten in MyScale hochladen.

# Daten aus den Datensätzen hochladen
client.insert("TaoBaoData_image", 
              data_image.to_records(index=False).tolist(), 
              column_names=data_image.columns.tolist())
client.insert("TaoBaoData_text", 
              data_text.to_records(index=False).tolist(), 
              column_names=data_text.columns.tolist())

# Vektorindex mit Cosinus erstellen
client.command("""
ALTER TABLE TaoBaoData_image
ADD VECTOR INDEX image_feature_index feature
TYPE MSTG
('metric_type=Cosine')
""")

client.command("""
ALTER TABLE TaoBaoData_text
ADD VECTOR INDEX text_feature_index feature
TYPE MSTG
('metric_type=Cosine')
""")

# Suche mit MyScale

Wenn ein Benutzer eine Frage eingibt, wandeln wir seine Frage in einen Vektor um und führen eine Abfrage in der Datenbank durch. Dieser Abrufprozess hilft uns, die besten K Produktbilder und ihre entsprechenden Produktbeschreibungen zu erhalten. Diese Produktbeschreibungen geben wir dann an das GPT-Modell weiter, das die Empfehlungen weiter verfeinert und detailliertere Produktvorstellungen liefert. Zusätzlich beinhalten wir in den endgültigen Gesprächsergebnissen auch die Anzeige von Produktbildern für den Benutzer.

Kodieren der Frage:

question = 'Do you have any black dress for women?'
emb_query = retriever.encode(question).tolist()

Suche im Datensatz TaoBaoData_text, Rückgabe der Top-2-Produktinformationen:

top_k = 2
results = client.query(f"""
SELECT id, product_text, distance(vector, {emb_query}) as dist
FROM TaoBaoData_text
ORDER BY dist LIMIT {top_k}
""")

summaries = {'id': [], 'product_text': []}
for res in results.named_results():
    summaries['product_text'].append(res["product_text"])
    summaries['id'].append(res["id"])

Wir haben jetzt eine dist wie folgt:

{'id':['065906','104588'], 
'product_text': ['Plus Size Womens Autumn New Arrival Elegant Temperament 2019 Concealing Belly Fashionable Mid-length Lace Dress.'
'2019 Summer New Arrival High-end Asymmetrical Shoulder Strap Chic Slimming Daily V-neck Dress for Women, Trendy.']}

Danach können wir diese Liste wie zu Beginn über die OpenAI-API an GPT4 übergeben, hier ist ein Beispiel:

system_message = f"""
    Based on the user's question, we have retrieved two items with the 
    following information. provide recommendations for these two items based on 
    the product text.
    {summaries}
    If the user requests to see the style, please return the corresponding 
    product IDs.
"""

Wenn wir die Produkt-ID haben, können wir im Datensatz TaoBaoData_image nach den Bildern suchen:

results = client.query(f"""
SELECT id, product_url, 
FROM TaoBaoData_image
WHERE id IN {summaries['id']}
""")
65906 104588
Image: 2.jpg Image: 4.jpg

Jetzt können wir dieses Ergebnis an den Benutzer zurückgeben, um ihm bei weiteren Entscheidungen und Interaktionen zu helfen.

Ein ähnlicher Prozess kann auch für die Bildsuche verwendet werden. Wenn ein Benutzer beispielsweise Kleidung finden möchte, die einem in einem Bild gezeigten ähnlich ist, können wir Bild-Einbettungen für die Suche verwenden.

# Fazit

MyScale kann multimodale Daten effizient verarbeiten und bietet Startups eine kostengünstige Lösung. Durch die Integration verschiedener Modalitäten und die Optimierung der Ressourcennutzung verbessert MyScale die Fähigkeiten des Kundenservice, ohne hohe Kosten zu verursachen. Diese Herangehensweise ermöglicht es Startups, Ressourcen effizient zuzuweisen und sich auf wesentliche Aspekte ihres Geschäfts zu konzentrieren. Skalierbarkeit und Kosteneffizienz sind entscheidend für den Erfolg von Startups und gewährleisten nachhaltiges Wachstum und maximale Rendite. Die Stärken von MyScale in der multimodalen Datenverarbeitung ermöglichen es Startups, sich zu skalieren und dabei kosteneffizient zu bleiben. Die Nutzung von MyScale ermöglicht es Startups, Ressourcen klug zu verwalten und sich in einem wettbewerbsintensiven Markt zu behaupten.

Keep Reading
images
RAG vs. Large Context LLMs: RAG wird bestehen bleiben

Die Iterationsgeschwindigkeit der generativen KI (GenAI) wächst exponentiell. Eine Konsequenz davon ist, dass das Kontextfenster - die Anzahl der Tokens, die ein großes Sprachmodell (LLM) gleichzeitig ...

images
Wie man ein LLM mit OpenAI feinabstimmt

Willkommen zurück zu unserer Serie über die Feinabstimmung von Sprachmodellen (LLMs)! In unserem vorherigen Beitrag haben wir die [Feinabstimmung von LLMs mit Hugging Face](https://myscale.com/blog/de ...

Start building your Al projects with MyScale today

Free Trial
Contact Us