Generieren Sie Tonnen von Wörtern und Antworten, die auf allgemeinem Wissen basieren, aber was passiert, wenn wir Antworten benötigen, die genaue und spezifische Kenntnisse benötigen? Allgemeine Modelle haben häufig Schwierigkeiten, Antworten auf domänenspezifische Fragen aus einer Reihe von Gründen zu geben. Vielleicht sind die Daten, auf denen sie trainiert wurden, jetzt veraltet, vielleicht ist das, was wir fragen, ist Wirklich Spezifisch und spezialisiert, möchten wir Antworten, die persönliche oder Unternehmensdaten berücksichtigen, die einfach nicht öffentlich sind. Die Liste geht weiter.

Wie können wir additionally generative KI nutzen und gleichzeitig unsere Antworten genau, related und bodenständig halten? Eine gute Antwort auf diese Frage ist die REMAINAL-AUGENTED-Era (LAG) Rahmen. Rag ist ein Rahmen, der aus zwei Schlüsselkomponenten besteht: Abruf und Era (duh!). Im Gegensatz zu ausschließlich generativen Modellen, die für bestimmte Daten vorgeschrieben sind, enthält RAG einen zusätzlichen Abrufschritt, mit dem wir zusätzliche Informationen von einer externen Quelle wie einer Datenbank oder einem Dokument in das Modell überschreiten können. Um es anders auszudrücken, ermöglicht eine Lag -Pipeline die Bereitstellung kohärenter und natürlicher Reaktionen (bereitgestellt durch den Erzeugungsschritt), die auch sachlich genau und in einer Wissensbasis unserer Wahl (bereitgestellt durch den Abrufschritt) sind.

Auf diese Weise kann RAG ein äußerst wertvolles Instrument für Anwendungen sein, bei denen hochspezialisierte Daten erforderlich sind, z. B. Kundendienst, Rechtsberatung oder technische Dokumentation. Ein typisches Beispiel für eine Lag -Anwendung sind Chatbots für Kundensupport. Die Beantwortung von Kundenproblemen auf der Grundlage der Datenbank eines Unternehmens mit Supportdokumenten und FAQs. Ein weiteres Beispiel wären komplexe Software program oder technische Produkte mit umfangreichen Fehlerbehebungsleitfäden. Ein weiteres Beispiel wäre Rechtsberatung – ein Lappenmodell würde auf benutzerdefinierte Daten aus Rechtsbibliotheken, früheren Fällen oder festen Richtlinien zugreifen und abrufen. Die Beispiele sind wirklich endlos; In all diesen Fällen ermöglicht der Zugriff auf externe, spezifische und relevante für die Kontextdaten das Modell jedoch, genauere und genauere Antworten anzubieten.

In diesem Beitrag gehe ich Sie durch den Bau einer einfachen Lag -Pipeline in Python unter Verwendung von Chatgpt -API, Langchain und Faiss.

Was ist mit Rag?

Aus technischeren Sicht ist Rag eine Technik, mit der die Antworten eines LLM erhöht werden, indem sie zusätzliche, domänenspezifische Informationen injiziert. Im Wesentlichen ermöglicht RAG ein Modell, auch zusätzliche externe Informationen – wie ein Rezeptbuch, ein technisches Handbuch oder die interne Wissensbasis eines Unternehmens – zu berücksichtigen, während er seine Antworten bildet.

Dies ist sehr wichtig, da es uns ermöglicht, eine Reihe von Problemen zu beseitigen, die LLMs innewohnt, wie zum Beispiel:

  • Halluzinationen – Dinge erfinden
  • Veraltete Informationen – Wenn das Modell nicht in den letzten Daten trainiert wurde
  • Transparenz – Nicht zu wissen, woher Antworten kommen

Um diese Arbeit zu machen, werden die externen Dokumente zunächst in Vektoreinbettungen verarbeitet und in einer Vektor -Datenbank gespeichert. Wenn wir dann eine Eingabeaufforderung an die LLM senden, werden relevante Daten aus der Vektor -Datenbank abgerufen und zusammen mit unserer Aufforderung an die LLM weitergeleitet. Infolgedessen wird die Antwort des LLM gebildet, indem sowohl unsere Eingabeaufforderung als auch alle relevanten Informationen berücksichtigt werden, die in der Vektor -Datenbank im Hintergrund vorhanden sind. Eine solche Vektor -Datenbank kann lokal oder in der Cloud mit einem Dienst wie mithilfe eines Dienstes gehostet werden Tannenzapfenoder Waviate.

Bild des Autors

Was ist mit Chatgpt API, Langchain und Faiss?

Die erste Komponente zum Erstellen einer Lag -Pipeline ist das LLM -Modell, das die Antworten erzeugt. Dies kann jeder LLM sein, wie Gemini oder Claude, aber in diesem Beitrag werde ich OpenAs Chatgpt verwenden Modelle über ihre API -Plattform. Um ihre API zu verwenden, müssen wir uns anmelden und einen API -Schlüssel erhalten. Wir müssen auch sicherstellen, dass die jeweiligen Python -Bibliotheken installiert sind.

pip set up openai

Die andere Hauptkomponente beim Erstellen eines Lags ist die Verarbeitung externer Daten – die Erzeugung von Einbettungen aus Dokumenten und das Speichern in einer Vektordatenbank. Der beliebteste Framework für die Ausführung einer solchen Aufgabe ist Langchain. Insbesondere erlaubt Langchain:

  • Textual content aus verschiedenen Dokumenttypen laden und extrahieren (PDFs, DOCX, TXT usw.)
  • Teilen Sie den Textual content in Stücke auf, die für die Erzeugung der Einbettungen geeignet sind
  • Generieren Sie Vektoreinbettungen (in diesem Beitrag mit Hilfe der API von Openai)
  • Speichern und suchen Sie Einbettung über Vektordatenbanken wie FaissAnwesend ChromaUnd Tannenzapfen

Wir können die erforderlichen Langchain -Bibliotheken einfach installieren nach:

pip set up langchain langchain-community langchain-openai

In diesem Beitrag werde ich Langchain zusammen mit verwenden Faiss Eine lokale Vektor -Datenbank, die von Fb AI Analysis entwickelt wurde. Faiss ist ein sehr leichtes Paket und ist daher für den Bau einer einfachen/kleinen Lappenpipeline geeignet. Es kann einfach installiert werden mit:

pip set up faiss-cpu

Alles zusammenstellen

Zusammenfassend werde ich additionally verwenden:

  • ChatGPT -Modelle über Openais API als LLM
  • Langchain, zusammen mit der Openai -API, um die externen Dateien zu laden, zu verarbeiten und die Vektor -Einbettungen zu generieren
  • Faiss, um eine lokale Vektordatenbank zu generieren

Die Datei, die ich für diesen Beitrag in die Lag -Pipeline einspeisen werde, ist eine Textdatei mit einigen Fakten über mich. Diese Textdatei befindet sich im Ordner ‚RAG -Dateien‘.

Jetzt sind wir alle eingerichtet und können zunächst unseren API -Schlüssel angeben und unser Modell initialisieren:

from openai import OpenAI # Chat_GPT API key api_key = "your key" 

# initialize LLM 
llm = ChatOpenAI(openai_api_key=api_key, mannequin="gpt-4o-mini", temperature=0.3)

Anschließend können wir die Dateien laden, die wir für den Lappen verwenden möchten, die Einbettungen generieren und sie wie folgt als Vektordatenbank speichern:

# loading paperwork for use for RAG 
text_folder = "rag_files"  

all_documents = ()
for filename in os.listdir(text_folder):
    if filename.decrease().endswith(".txt"):
        file_path = os.path.be part of(text_folder, filename)
        loader = TextLoader(file_path)
        all_documents.prolong(loader.load())

# generate embeddings
embeddings = OpenAIEmbeddings(openai_api_key=api_key)

# create vector database w FAISS 
vector_store = FAISS.from_documents(paperwork, embeddings)
retriever = vector_store.as_retriever()

Schließlich können wir alles in eine einfache ausführbare Python -Datei einpacken:

def important():
    print("Welcome to the RAG Assistant. Kind 'exit' to stop.n")
    
    whereas True:
        user_input = enter("You: ").strip()
        if user_input.decrease() == "exit":
            print("Exiting…")
            break

        # get related paperwork
        relevant_docs = retriever.get_relevant_documents(user_input)
        retrieved_context = "nn".be part of((doc.page_content for doc in relevant_docs))

        # system immediate
        system_prompt = (
            "You're a useful assistant. "
            "Use ONLY the next information base context to reply the person. "
            "If the reply just isn't within the context, say you do not know.nn"
            f"Context:n{retrieved_context}"
        )

        # messages for LLM 
        messages = (
            {"position": "system", "content material": system_prompt},
            {"position": "person", "content material": user_input}
        )

        # generate response
        response = llm.invoke(messages)
        assistant_message = response.content material.strip()
        print(f"nAssistant: {assistant_message}n")

if __name__ == "__main__":
    important()

Beachten Sie, wie die Systemaufforderung definiert ist. Im Wesentlichen ist eine Systemaufforderung eine Anweisung, die dem LLM zur Verfügung gestellt wird, der das Verhalten, den Ton oder die Einschränkungen des Assistenten festlegt, bevor der Benutzer interagiert. Zum Beispiel könnten wir die Systemaufforderung festlegen, die LLM zu vermitteln, wie sie Antworten wie ein 4-Jähriger oder einen Raketenwissenschaftler liefern. Hier bitten wir, Antworten nur auf der Grundlage der externen Daten zu geben, die wir zur Verfügung gestellt haben.Maria Fakten

Mal sehen, was wir gekocht haben! 🍳

Erstens stelle ich eine Frage, die für die bereitgestellte externe Datenquelle irrelevant ist, um sicherzustellen, dass das Modell nur die bereitgestellte Datenquelle verwendet, wenn sie die Antworten bilden und nicht allgemeines Wissen.


… Und dann stellte ich einige Fragen speziell aus der Datei, die ich zur Verfügung gestellt habe…

✨✨✨✨

In meinem Kopf

Anscheinend ist dies ein sehr einfaches Beispiel für ein Lag -Setup – es gibt viel mehr zu berücksichtigen, wenn es um die Implementierung in einem realen Geschäftsumfeld wie Sicherheitsbedenken hinsichtlich der Umgang mit Daten oder Leistungsproblemen bei einem größeren, realistischen Wissenskorpus und erhöhten Nutzung von Token ist. Ich glaube jedoch, dass die API von OpenAI wirklich beeindruckend ist und ein immenses, ungenutztes Potenzial für den Aufbau von kundenspezifischen, kontextspezifischen KI-Anwendungen bietet.


Liebte diesen Beitrag? Lass uns Freunde sein! Mach mit

📰Substanz 💌 Medium 💼LinkedInKaufen Sie mir einen Kaffee!

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert