# LangChain

# Einführung

Große Sprachmodelle (LLMs) revolutionieren das Gebiet der künstlichen Intelligenz, indem sie Entwicklern ermöglichen, leistungsstarke Anwendungen zu erstellen, die zuvor nicht möglich waren. Allerdings reicht es oft nicht aus, LLMs isoliert zu verwenden, um das volle Potenzial einer Anwendung auszuschöpfen. Die eigentliche Stärke liegt darin, sie mit anderen Quellen von Berechnungen oder Wissen zu kombinieren. LangChain soll Entwicklern dabei helfen, diese Art von Anwendungen zu erstellen.

Weitere Informationen zu LangChain finden Sie auf der LangChain-Dokumentationswebsite (opens new window).

# Voraussetzungen

Bevor wir beginnen, müssen wir das langchain (opens new window) und den ClickHouse Python-Client (opens new window) installieren.

pip install -U langchain clickhouse-connect

# Umgebung einrichten

Um OpenAI-Einbettungsmodelle zu verwenden, müssen wir uns bei OpenAI (opens new window) für einen OpenAI-API-Schlüssel anmelden. Außerdem benötigen wir die Informationen zum Cluster-Host, Benutzernamen und Passwort aus der MyScale-Konsole (Verbindungsdetails).

Führen Sie den folgenden Befehl aus, um die Umgebungsvariablen festzulegen:

export MYSCALE_HOST="YOUR_CLUSTER_HOST"
export MYSCALE_PORT=443
export MYSCALE_USERNAME="YOUR_USERNAME"
export MYSCALE_PASSWORD="YOUR_CLUSTER_PASSWORD"
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"

# Daten laden und Index erstellen

Wir extrahieren Einbettungsvektoren aus der Eingabedatei mithilfe des OpenAIEmbedding-Modells:

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
loader = TextLoader("YOUR_PATH_TO_FILE")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
for d in docs:
    d.metadata = {"some": "metadata"}

Als nächstes laden wir die Daten in den MyScale-Cluster hoch. Wenn der Index nicht vorhanden ist, wird er erstellt, andernfalls wird er wiederverwendet. Weitere Informationen zur Konfiguration Ihres MyScale-Index finden Sie unter MyScaleSettings (opens new window).

from langchain.vectorstores import MyScale
docsearch = MyScale.from_documents(docs, embeddings)

# Abfragen von MyScale

# Ähnlichkeitssuche

Wir können basierend auf einer Ähnlichkeitssuche abfragen:

query = "YOUR_QUESTION"
docs = docsearch.similarity_search(query)
print(docs[0].page_content)

# Gefilterte Suche

Sie haben direkten Zugriff auf den myscale SQL where-Statement. Sie können eine WHERE-Klausel gemäß dem Standard-SQL schreiben.

HINWEIS: Bitte beachten Sie SQL-Injection. Diese Schnittstelle darf nicht direkt von Endbenutzern aufgerufen werden.

Wenn Sie Ihre column_map in Ihren Einstellungen angepasst haben, können Sie mit einem Filter wie folgt suchen:

meta = docsearch.metadata_column
output = docsearch.similarity_search_with_relevance_scores(
  "YOUR_QUESTION", k=4, where_str=f"{meta}.doc_id<10")
for d, dist in output:
    print(dist, d.metadata, d.page_content[:20] + '...')