In den letzten Monaten warfare die KI-Welt vom unglaublichen Aufstieg der Massive Language Fashions (LLMs) fasziniert. Mit dem explosiven Wachstum von Unternehmen wie OpenAI (ChatGPT), Microsoft (Bing Chat) und Google (Bard). Es besteht kein Zweifel, dass dieses leistungsstarke KI-Modell immer beliebter wird und neue Möglichkeiten für Anwendungen zur Verarbeitung natürlicher Sprache eröffnet, sodass Entwickler anspruchsvollere, menschenähnliche Interaktionen in Chatbots, Frage-Antwort-Systemen, Zusammenfassungstools und mehr erstellen können.
Bevor wir uns eingehend mit der Entwicklung der LLM-basierten KI-Anwendung befassen, müssen wir zunächst etwas über LLM verstehen.
Was ist ein großes Sprachmodell??
Massive Language Mannequin (LLM) bezieht sich auf ein fortschrittliches Modell der künstlichen Intelligenz, das auf riesigen Textdatenmengen trainiert wird, um menschenähnliche Sprache zu verstehen und zu erzeugen. Dieses Modell, wie beispielsweise GPT-4 (Generative Pre-trained Transformer 4) von OpenAI, basiert auf Deep-Studying-Techniken und ist in der Lage, ein breites Spektrum an Aufgaben zur Verarbeitung natürlicher Sprache auszuführen.
LLM werden an verschiedenen Textquellen wie Büchern, Artikeln, Web sites usw. geschult, wodurch sie sich eine breite Wissensbasis und sprachliche Muster aneignen können. Durch die Nutzung dieses umfangreichen Wissens kann LLM kohärente und kontextrelevante Texte generieren, Fragen beantworten, Sprachen übersetzen, Stimmungsanalysen durchführen und sogar Gespräche führen.
Auf einfache ELI5-Artwork können Sie sich additionally vorstellen, dass Sie einen superschlauen Freund haben, der alles über Wörter und Sprache weiß. Sie haben Unmengen von Büchern und Artikeln gelesen und können wie ein Mensch verstehen und sprechen. Das ist im Grunde das, was ein Massive Language Mannequin ist – eine superintelligente KI, die auf einer riesigen Menge an Textdaten trainiert wurde.
Es kann verstehen, was Sie sagen oder schreiben, und auf eine Weise reagieren, die wie eine echte Particular person klingt. Es ist, als ob Sie einen Sprachexperten zur Hand hätten, der Ihnen bei allen möglichen sprachbezogenen Aufgaben hilft, von der Beantwortung von Fragen bis zum Schreiben von Geschichten. LLMs verändern die Artwork und Weise, wie wir mit Computern interagieren, und sorgen dafür, dass sich unsere Gespräche mit KI natürlicher und menschlicher anfühlen.
LangChain als LLM-Framework
LangChain ist ein Framework zur Entwicklung von Anwendungen, die auf Sprachmodellen basieren. Das LangChain-Framework basiert auf diesen Prinzipien.
- Datenbewusst: Verbinden Sie ein Sprachmodell mit anderen Datenquellen.
- Agent: Erlauben Sie einem Sprachmodell, mit seiner Umgebung zu interagieren.
Innerhalb des Frameworks gibt es einige Module. Module sind die Kernabstraktionen, die wir als Bausteine jeder LLM-basierten Anwendung betrachten. Für jedes Modul stellt LangChain standardmäßige, erweiterbare Schnittstellen zur Verfügung. LangChain bietet auch externe Integrationen und sogar Finish-to-Finish-Implementierungen für den Standardgebrauch. Die Module sind:
- Modelle: LangChain bietet Unterstützung für verschiedene Modelltypen und Modellintegrationen. Es ermöglicht Ihnen die einfache Integration und Arbeit mit verschiedenen Sprachmodellen und verbessert so die Fähigkeiten Ihrer Anwendungen.
- Aufforderungen: Mit LangChain können Sie Eingabeaufforderungen effizient verwalten, optimieren und serialisieren. Dies hilft dabei, genauere und kontextbezogenere Antworten aus den Sprachmodellen zu generieren.
- Speicher: LangChain bietet eine Standardschnittstelle für Speicher und eine Sammlung von Speicherimplementierungen. Es erleichtert die Beibehaltung des Zustands zwischen Aufrufen in einer Kette oder einem Agenten und verbessert so das Wissen und die Erinnerungsfähigkeiten des Modells.
- Indizes: Um die Leistungsfähigkeit von Sprachmodellen zu steigern, hilft Ihnen LangChain, diese effektiv mit Ihren eigenen Textdaten zu kombinieren. Es bietet Greatest Practices für die Indizierung und Durchsuchung Ihrer Datenquellen.
- Ketten: Ketten sind Aufrufsequenzen, entweder an Sprachmodelle oder andere Dienstprogramme. LangChain bietet eine Standardschnittstelle für Ketten sowie zahlreiche Integrationen und Finish-to-Finish-Ketten für gängige Anwendungen.
- Agenten: Agenten ermöglichen es Sprachmodellen, Entscheidungen zu treffen, Maßnahmen zu ergreifen, Ergebnisse zu beobachten und den Prozess zu wiederholen, bis das Ziel erreicht ist. LangChain bietet eine Standardschnittstelle für Agenten, eine Auswahl an Agenten und Beispiele für Finish-to-Finish-Agenten.
- Rückrufe: Mit Rückrufen können Sie die Zwischenschritte einer beliebigen Kette protokollieren und streamen, sodass Sie die Interna einer Anwendung einfacher beobachten, debuggen und bewerten können.
Greatest Practices und integrierte Implementierungen für gängige LangChain-Anwendungsfälle:
- Autonome Agenten: LangChain unterstützt die Entwicklung autonomer Agenten wie AutoGPT und BabyAGI, bei denen es sich um Langzeitagenten handelt, die mehrere Schritte ausführen, um ein Ziel zu erreichen.
- Agentensimulationen: LangChain erleichtert die Erstellung von Sandbox-Umgebungen, in denen Agenten miteinander interagieren oder auf Ereignisse reagieren können, und bietet Einblicke in ihr Langzeitgedächtnis.
- Persönliche Assistenten: LangChain eignet sich ultimate zum Aufbau persönlicher Assistenten, die Maßnahmen ergreifen, sich an Interaktionen erinnern und Zugriff auf Ihre Daten haben und so personalisierte Unterstützung bieten können.
- Beantwortung von Fragen: LangChain zeichnet sich durch die Beantwortung von Fragen zu bestimmten Dokumenten aus und nutzt die Informationen in diesen Dokumenten, um genaue und relevante Antworten zu erstellen.
- Chatbots: LangChain nutzt die Textgenerierungsfunktionen von Sprachmodellen und ermöglicht die Erstellung ansprechender Chatbots.
- Abfragen tabellarischer Daten: LangChain bietet Anleitungen zur Verwendung von Sprachmodellen zum Abfragen von Daten, die in Tabellenformaten wie CSV-Dateien, SQL-Datenbanken oder Datenrahmen gespeichert sind.
- Code-Verständnis: LangChain hilft bei der Verwendung von Sprachmodellen zum Abfragen und Verstehen von Quellcode von Plattformen wie GitHub.
- Interaktion mit APIs: LangChain ermöglicht Sprachmodellen die Interaktion mit APIs und versorgt sie mit aktuellen Informationen und der Möglichkeit, auf der Grundlage von Echtzeitdaten Maßnahmen zu ergreifen.
- Extraktion: LangChain hilft dabei, strukturierte Informationen aus unstrukturiertem Textual content zu extrahieren und so die Datenanalyse und -interpretation zu optimieren.
- Zusammenfassung: LangChain unterstützt die Zusammenfassung längerer Dokumente in prägnante, leicht verdauliche Informationsblöcke und ist damit ein leistungsstarkes Instrument zur Datenerweiterung.
- Auswertung: Da es schwierig ist, generative Modelle mithilfe herkömmlicher Metriken zu bewerten, bietet LangChain Eingabeaufforderungen und Ketten, um den Bewertungsprozess mithilfe der Sprachmodelle selbst zu unterstützen.
Für eine detailliertere Erklärung können Sie hier einen Blick in die Dokumentation des Projekts werfen: https://python.langchain.com/en/latest/.
Lass uns etwas Code kochen!
Da LangChain ein Framework ist, ist es nicht wirklich schwierig, mit dem Code zu beginnen. Wir werden den Code in der Python-Sprache kochen, der beliebtesten Programmiersprache sowohl für maschinelles Lernen als auch für die Deep-Studying-Entwicklung.
Installieren Sie zunächst LangChain mit dem folgenden Befehl:
pip set up langchain
pip set up openai
Ja, wir werden die API von OpenAI verwenden, daher müssen wir auch deren SDK installieren. Dann müssen wir, wie jeder es tut, den OpenAI-Schlüssel einrichten, additionally müssen Sie hier einen zusammentragen: https://platform.openai.com/account/api-keys.
import os
os.environ['OPENAI_API_KEY'] = 'your key'
Dieser Schritt ist sehr wichtig, da die meisten LangChain-Module die Einrichtung eines OpenAI-API-Schlüssels in Ihrer Umgebung benötigen, sodass Sie den API-Schlüssel nicht mehr übergeben müssen, wenn Sie eines der Module verwenden möchten. Danach werden wir die LLMs importieren, weil wir mehr Zufälligkeit wollen, additionally legen wir die fest Temperatur bis 0,9.
from langchain.llms import OpenAI
llm = OpenAI(temperature=0.9)
Ich werde dem Modell nur eine einfache Eingabe geben:
print(llm("give me a dad joke"))
Ergebnis:
Q: What did the fish say when it swam right into a wall?
A: Dam!
Ziemlich einfach und lustig, oder? 😅 (Verzeihen Sie meinen Humor)
Nachdem Sie nun über fundierte Kenntnisse über die Grundlagen dieses Frameworks verfügen, werden wir uns eingehender mit einem weiteren Anwendungsfall dieses Frameworks befassen.
Ketten
Als Identify des Frameworks ist dieses Wort enthalten. Ketten sind eine Reihe wiederverwendbarer Komponenten, die miteinander verbunden werden können, um eine bestimmte Aufgabe auszuführen. LangChain bietet eine Standardschnittstelle für Chains sowie einige gängige Implementierungen von Chains zur Vereinfachung der Verwendung.
Es gibt einige Arten von Ketten in LangChain, wie z. B. LLM Chain, Router Chains, Sequential Chains, Transformation Chain, Analyze Doc Chain und mehr. In diesem Artikel werden wir versuchen, mithilfe der Q&A-Kette eine einfache Eingabeaufforderung zu erstellen, die textbasierte Daten (Artikel/Dokumentation) verwendet und eine Q&A-Anwendung erstellt.
Importieren Sie alle notwendigen Pakete:
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.docstore.doc import Doc
from langchain.prompts import PromptTemplate
from langchain.indexes.vectorstore import VectorstoreIndexCreator
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI
Da wir eine Frage-und-Antwort-Anwendung basierend auf textbasierten Daten erstellen möchten, verwende ich diesen Artikel: https://www.kompas.id/baca/english/2023/06/08/en-prediksi-kiamat-baru-semua-benda-di-alam-semesta-berakhir-dengan-menguapvon Harian Kompas als mein Datensatz.
Wir müssen den gesamten Artikel in eine einzige TXT-Datei extrahieren und in unser Python-Programm laden:
with open("/content material/article.txt") as f:
aticle_kompas = f.learn()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_text(article_kompas)embeddings = OpenAIEmbeddings()
Mit Chroma vektorisieren wir den Datensatz.
Chroma ist eine Vektordatenbank zum Erstellen von KI-Anwendungen mit Einbettungen. Es gibt einen Wrapper für Chroma-Vektordatenbanken, der es Ihnen ermöglicht, sie als Vektorspeicher zu verwenden, sei es für die semantische Suche oder die Beispielauswahl.
docsearch = Chroma.from_texts(texts, embeddings, metadatas=[{"source": str(i)} for i in range(len(texts))]).as_retriever()
Nachdem wir nun die Daten vorbereitet haben, können wir unseren Artikel abfragen. Versuchen wir es mit einer einfachen Abfrage. Da es in dem Artikel um Schwarze Löcher und weltraumbezogene Objekte geht, würde meine Abfrage folgendermaßen aussehen:
question = "What's Area Time?"
Fragen Sie die Daten mithilfe der QA-Kette ab:
docs = docsearch.get_relevant_documents(question)
chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff")
chain({"input_documents": docs, "query": question}, return_only_outputs=True)
Ergebnis:
{'output_text': ' Area-time is an idea in physics that mixes the three dimensions of house and the one dimension of time right into a single four-dimensional continuum. It's used to explain the conduct of matter and vitality within the universe.'}
Intestine beantwortet, oder? Wie wäre es, wenn wir die Eingabeaufforderung ändern und die Antwort in Indonesisch umwandeln?
prompt_template = """Use the next items of context to reply the query on the finish. If you do not know the reply, simply say that you do not know, do not attempt to make up a solution.{context}
Query: {query}
Reply in Indonesian:"""
PROMPT = PromptTemplate(
template=prompt_template, input_variables=["context", "question"]
)
chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff", immediate=PROMPT)
chain({"input_documents": docs, "query": question}, return_only_outputs=True)
Ergebnis:
{'output_text': ' Ruang-waktu adalah konsep yang menggabungkan ruang dan waktu menjadi satu konsep yang terintegrasi. Menurut teori relativitas umum Einstein, ruang-waktu akan dipengaruhi oleh gaya gravitasi, sehingga menyebabkan ruang-waktu menjadi melengkung.'}
Mit derselben Abfrage erhielten wir das Ergebnis sowohl auf Englisch als auch auf Indonesisch.
Für den letzten Koch möchte ich das Zusammenfassungsmodell in diesem Framework ausprobieren. Wir werden hierfür AnalyzeDocumentChain verwenden. Die AnalyzeDocumentChain ist eher eine Finish-to-Chain. Diese Kette nimmt ein einzelnes Dokument auf, teilt es auf und führt es dann durch eine CombineDocumentsChain. Dies kann eher als Finish-to-Finish-Kette verwendet werden.
from langchain import OpenAI
from langchain.chains.summarize import load_summarize_chainprompt_template = """Write a concise abstract of the next:
{textual content}
CONCISE SUMMARY IN INDONESIAN:"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["text"])
llm = OpenAI(temperature=0)
summary_chain = load_summarize_chain(llm, chain_type="map_reduce", map_prompt=PROMPT, combine_prompt=PROMPT)
Mithilfe desselben Artikels haben wir das Modell und die Eingabeaufforderung vorbereitet. In diesem Fall werde ich versuchen, den Artikel in indonesischer Sprache zusammenzufassen. Führen Sie dann das Modell mit dem Datensatz aus:
from langchain.chains import AnalyzeDocumentChain
summarize_document_chain = AnalyzeDocumentChain(combine_docs_chain=summary_chain)
summarize_document_chain.run(article_kompas)
Ergebnis:
Stephen Hawking menyatakan pada tahun 1974 bahwa lubang hitam akan menghilang melalui proses radiasi Hawking. Namun, sebuah studi baru menunjukkan bahwa semua objek besar di alam semesta juga akan menguap melalui proses yang sama. Ini akan mengubah pandangan kita tentang alam semesta dan masa depannya. Fisikawan masih perlu menemukan bukti radiasi Hawking yang diproduksi oleh objek-objek bermasa besar untuk memverifikasi prediksi tentang akhir bintang-bintang besar di alam semesta.
Der vollständige Code dieses Projekts ist hier verfügbar: maschinelles Lernen/LangChain – Kompas Article.ipynb at main · jerichosiahaya/machine-learning · GitHub