How Copilots Work: LLM Architecture, Grounding, and Intune

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

In diesem Blogbeitrag möchte ich mit dir tief in die Funktionsweise von LLMs und Copilots eintauchen, die wichtigsten Aspekte erklären und dir einige zentrale Architektur-Aspekte und Konzepte zeigen. Wir werden keinen eigenen Copilot bauen, aber ich teile mit dir auch einige Referenzarchitekturen sowie ein Tool, das ich entwickelt habe, um deine Fragen mit Informationen aus deinem eigenen Intune-Tenant zu beantworten. Lass mich wissen, ob ich auch einen zweiten Blogbeitrag erstellen soll, der dich Schritt für Schritt durch den Prozess führt, deinen eigenen Bot zu implementieren, der deine eigenen Daten und ein LLM-Modell nutzt, um dich in deinem Arbeitsalltag mit Intune zu unterstützen.

Konzeptdiagramm zur Copilot- und LLM-Architektur

Inhalt

  1. Inhalt
  2. Was ist ein Copilot?
  3. Was ist ein Large Language Model?
  4. Was ist der Unterschied zwischen LLM und klassischen NLP-Modellen?
  5. Was ist Grounding
  6. Was ist Prompt Engineering?
  7. Was ist Fine-Tuning?
  8. Fine-Tuning vs. Grounding
  9. Wie kann ich das Modell mit internem Wissen grounden
  10. Wie sieht ein professionelleres Konzept aus?
  11. Wie kann ich auch eine Websuche in meine App integrieren?
  12. Wie kann ich eine Lösung zusammen mit Intune bauen
  13. Wie sieht die Architektur des M365 Copilot aus?
  14. Lass mich den Copilot Stack erklären
  15. Was ist Orchestrierung?
  16. Was sind die gängigsten Frameworks?
    1. LangChain
    2. Semantic Kernel
    3. Vergleich
  17. Fazit

Was ist ein Copilot?

Machen wir es uns einfach und fragen ChatGPT:

Microsoft Copilot ist ein KI-gestütztes Tool, das Entwickler beim Schreiben und Pflegen von Code unterstützt. Es ist in verschiedene Microsoft-Produkte integriert, darunter Visual Studio und GitHub, wo es als GitHub Copilot bekannt ist. Dieses Tool nutzt Machine-Learning-Modelle, die auf einem riesigen Korpus an Quellcode trainiert wurden, um Vorschläge für Code-Vervollständigung, Debugging und sogar das Schreiben ganzer Code-Blöcke zu liefern.

Das ist nicht ganz korrekt, aber es ist auch wichtig, das zu verstehen. Nicht alle Inhalte, die du von GPT bekommst, sind immer korrekt. Du solltest immer überprüfen und gegenchecken, bevor du etwas teilst. Lass mich definieren, was es ist. Für mich definiert ein Copilot die Art neu, wie wir mit dem Internet, mit unserem PC sowie mit Tools und Inhalten interagieren. Er kann dich zum Beispiel beim Recherchieren von Dingen im Internet unterstützen, Präsentationen generieren oder Automatisierungen und Code erstellen.

Ein Copilot spricht mit dir wie eine echte Person und ist direkt in die Tools integriert, wo du ihn brauchst. Manchmal können sie auch Aktionen ausführen, wie der Windows Copilot, der Apps oder Timer für dich starten kann und dir hilft, mit dem Betriebssystem zu interagieren. Ein Copilot verfügt über tiefgehendes Wissen und ist mit den notwendigen Informationen gegroundet.

Um dir deutlicher zu machen, wie groß der Hype ist, hier ein paar Fakten. Mobiltelefone brauchten 16 Jahre, um 100 Millionen Nutzer zu erreichen, Instagram 30 Monate und Google Translate 78 Monate. Bei ChatGPT waren es 2,5 Monate.

Einer der ersten Copilots auf dem Gebiet war GitHub Copilot, der beim Schreiben von Code unterstützte.

GitHub Copilot Logo auf einem Coding-Hintergrund

Was ist ein Large Language Model?

Ein Large Language Model ist ein Transformer-Modell, das auf Basis der Transformer-Architektur entwickelt wurde. Jetzt weißt du also, was es ist. Gehen wir zum nächsten Kapitel….. Okay, lass es uns aufschlüsseln, um es klarer zu machen.

Die Grundlagen aufgeschlüsselt

Zunächst ist es wichtig zu verstehen, was ein Transformer-Modell ist. Das Transformer-Modell, das 2017 in einem bahnbrechenden Paper mit dem Titel “Attention Is All You Need” vorgestellt wurde, revolutionierte das Feld des Natural Language Processing (NLP). Dieses Modell stützt sich stark auf einen Mechanismus namens “Attention”, der es ihm ermöglicht, die Bedeutung verschiedener Wörter in einem Satz zu gewichten. Dieser Ansatz unterscheidet sich von früheren Modellen, die Wörter linear oder sequenziell verarbeiteten und dabei oft den breiteren Kontext eines Satzes oder Absatzes verfehlten.

Large Language Models sind, wie der Name schon sagt, gigantisch in ihrem Umfang. Sie werden mit riesigen Datenmengen trainiert, die manchmal einen erheblichen Teil der öffentlich verfügbaren Daten aus dem Internet oder anderen Quellen umfassen. Dieses umfangreiche Training ermöglicht es diesen Modellen, menschliche Sprache auf eine Weise zu generieren, zu verstehen und auf sie zu reagieren, die bemerkenswert kohärent und kontextuell relevant ist.

Ein LLM ist letztlich ein neuronales Netz nach dem Transformer-Modell, das eine Eingabeschicht, mehrere verborgene Schichten und eine Ausgabeschicht besitzt. Die Größe von LLMs wird durch die Anzahl der Parameter definiert. GPT-2 hat 1,5 Mrd., GPT-3 hat 175 Mrd. Parameter und GPT-4 hat 1,4 Bio. Parameter. Hier kannst du auch die enorme Geschwindigkeit in der Entwicklung und Evolution erkennen. Das Training benötigt viel, und viel bedeutet wirklich viel Rechenleistung, insbesondere GPU-Leistung.

Architekturdiagramm eines Feedforward-Neural-Network für KI-Copilots

Was ist der Unterschied zwischen LLM und klassischen NLP-Modellen?

Klassische NLP-Modelle wie Textklassifizierungs- und Erkennungsmodelle müssen individuell entwickelt und trainiert werden. Sie haben für die einzelne Aufgabe, für die sie optimiert wurden, wirklich gut funktioniert.

NLP-Training-Pipeline-Diagramm für LLM-Copilot-Architektur

Bei LLMs ist das völlig anders: Sie wurden mit sehr großen Datensätzen trainiert, und dadurch verfügen sie über ein sehr großes und breites Verständnis, können verschiedene Medientypen wie Bild, Text und Ton verarbeiten und lassen sich daher für viele verschiedene Anwendungsfälle einsetzen, ohne sie anzupassen oder individuell zu trainieren.

Diagramm einer Trainings-Pipeline für Modelle mit ungelabelten Daten

Was ist Grounding

Es ist sehr wichtig, dass du dich nicht auf das Domänenwissen eines Modells verlässt. Warum? Es ist veraltet, nicht immer korrekt, du kannst Halluzinationen haben, und es kennt deine internen Prozesse und Richtlinien nicht. Genug Argumente. Wir sprechen hier von einem Large Language Model, das darauf optimiert ist, eine menschenähnliche Sprache zu verstehen und zu sprechen, aber es ist kein Allwissen-Repository. Aber wie kannst du sonst Fragen beantworten? Die Antwort ist Grounding.

Lass mich erklären, was es ist.

Grounding im Kontext eines Large Language Model (LLM) wie GPT bezieht sich auf die Fähigkeit des Modells, sein umfangreiches Wissen und Sprachverständnis mit realen Kontexten und spezifischen Situationen zu verknüpfen und darauf anzuwenden. In diesem Zusammenhang hörst du oft Retrieval Augmented Generation (RAG). Dabei werden externe Datenquellen oder vom Nutzer bereitgestellte Informationen integriert, um Antworten zu generieren, die relevant, korrekt und angemessen kontextualisiert sind. Im Wesentlichen hilft Grounding dem LLM, Anfragen nicht nur auf Basis seiner Trainingsdaten zu verstehen und zu beantworten, sondern auch den aktuellen Kontext oder spezifische Details zu berücksichtigen, die während der Interaktion bereitgestellt werden.

Hier ist ein sehr gutes Beispiel. Ich habe ChatGPT gefragt: “Wie kann ich ein Konfigurationsprofil in Intune erstellen?”. Die Antwort, die ich bekam, begann mit: Navigiere zum “Intune admin center”. Wie du weißt, liebt Microsoft es, seine Produkte umzubenennen. Der Name lautet Intune admin center und nicht mehr Endpoint Manager.

Ich habe dieselbe Frage im Bing Chat gestellt und eine Antwort erhalten, die sich auf das Microsoft Intune admin center bezog, zusammen mit einem Link zur Quelle, aus der diese Information stammte. Bing funktioniert so, dass es zuerst eine Websuche durchführt, um das Modell zu grounden, und dann die Frage beantwortet.

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

Was ist Prompt Engineering?

Bevor wir uns mit Prompt Engineering beschäftigen, klären wir zuerst, was ein Prompt ist. Ein Prompt ist eine kurze Anweisung oder Beschreibung, die einem LLM oder einem anderen System gegeben wird, um eine bestimmte Aktion oder Antwort auszulösen. Es ist üblicherweise eine Texteingabe, die die KI anleitet, was sie tun oder erstellen soll, wie etwa eine Frage zu stellen oder ein zu generierendes Bild zu beschreiben. Mit dem neuen GPT-4v ist es auch möglich, ein Bild einzugeben.

Nun zum Prompt Engineering. Prompt Engineering ist letztlich eine Fähigkeit, Prompts so zu gestalten, dass man effektiv mit LLM-Systemen kommuniziert. Dazu gehört, zu verstehen, wie eine KI verschiedene Formulierungen interpretiert und darauf reagiert, und den Prompt zu optimieren, um das gewünschte Ergebnis zu erzielen. Es ist besonders wichtig in Kontexten, in denen präzise oder nuancierte Antworten benötigt werden, und kann das Experimentieren mit verschiedenen Formulierungen, Strukturen und Schlüsselwörtern beinhalten, um die KI zu genaueren, relevanteren oder kreativeren Ergebnissen zu führen.

Ich könnte stunden- und wochenlang über dieses Thema sprechen. Ich werde einen eigenen Blogbeitrag erstellen, um Prompt Engineering im Detail zu erklären und dir einen Einstiegsleitfaden zu geben.

Was ist Fine-Tuning?

Fine-Tuning ist der Prozess, ein vortrainiertes Modell zu nehmen und es auf einem spezifischen, oft kleineren Datensatz weiter zu trainieren. Dieses spezialisierte Training ermöglicht es dem Modell, sein Wissen und seine Fähigkeiten an eine bestimmte Domäne oder Aufgabe anzupassen. Ein typischer Datensatz dafür ist zum Beispiel Frage und Antwort. Fine-Tuning ist in der Regel teuer und erfordert außerdem viele Ressourcen.

Fine-Tuning vs. Grounding

Es gibt eine klare Hierarchie, wie du Kontext in ein Large Language Model bringst. Ich würde sagen, 90 % der Anwendungsfälle lassen sich allein mit Grounding und Prompt Engineering erfüllen. Wenn das aus bestimmten Gründen (die ich bald genauer erläutere) nicht funktioniert, dann kannst du das Modell fine-tunen. Wenn auch das nicht funktioniert, dann hast du die Möglichkeit, dein eigenes Modell zu trainieren. Mit diesen Schritten steigen Komplexität, Preis, Wartung und viele andere Faktoren. Mein klarer Rat dazu: Versuche immer, deinen Anwendungsfall ohne Fine-Tuning zu lösen. Außerdem arbeiten alle Copilots mit grundlegenden Foundation-Modellen.

KriteriumLLM-Fine-TuningPrompt-Grounding
DefinitionBeim Fine-Tuning wird ein LLM auf einem spezifischen Datensatz trainiert, um seine Antworten anzupassen.Prompt-Grounding bedeutet, Kontext in den Prompt einzufügen.
DatenanforderungHoch. Erfordert für das Training einen Datensatz, der für die spezifische Aufgabe oder Domäne relevant ist.Kommt darauf an. Es stützt sich auf das vorhandene Wissen und die Fähigkeiten des LLM, jedoch mit Kontext/Daten im Prompt.
FlexibilitätNach dem Fine-Tuning ist das Modell auf die trainierte Domäne spezialisiert. Ändern sich die Daten, ist ein neues Fine-Tuning nötig.Sehr flexibel; der Ansatz kann für verschiedene Aufgaben oder Domänen einfach durch Ändern des Prompts angepasst werden.
Kosten und RessourcenRessourcenintensiv, da es zusätzliches Training erfordert, das Rechenleistung und Zeit benötigt.Kostengünstig und weniger ressourcenintensiv, da kein zusätzliches Modelltraining erforderlich ist.
Grad der AnpassungErmöglicht tiefe Anpassung, da das Modell spezifische Muster, Stile oder Informationen aus den Trainingsdaten lernt.Begrenzte Anpassung im Vergleich zum Fine-Tuning; die Antwort des Modells ist nur so gut wie das Design des Prompts.
ImplementierungszeitKann aufgrund des nötigen Trainings und der Modelloptimierung zeitaufwendig sein.Schnell umzusetzen, da nur ein geeigneter Prompt erstellt werden muss.
SkalierbarkeitSkalierbar, kann aber für verschiedene Domänen oder Aufgaben ein erneutes Training oder zusätzliches Fine-Tuning erfordern.Sehr skalierbar, da unterschiedliche Prompts leicht erstellt und für verschiedene Aufgaben angewendet werden können.
AnwendungsfälleIdeal für spezialisierte Aufgaben, bei denen fundiertes Wissen oder ein spezifischer Antwortstil entscheidend sind.Am besten geeignet für allgemeine Aufgaben oder wenn man sich schnell an unterschiedliche Anforderungen anpassen muss, ohne zusätzliches Training.

Wie kann ich das Modell mit internem Wissen grounden

Es gibt mehrere Wege, das zu tun. Der einfachste Weg ist, Text oder den relevanten Inhalt aus einem Dokument oder von woanders in deinen Prompt zu kopieren. Das funktioniert für einzelne Anfragen, aber sobald du eine vollständige Anwendung darauf aufbaust, musst du einen besseren Weg finden.

Ein Weg, das zu tun, ist, deine Dokumente und Inhalte in einen Blob Storage zu legen und Azure AI Search zu nutzen, um deine Dokumente zu indexieren. Wenn ein Nutzer in deiner Anwendung eine Frage stellt, wird die Frage zuerst an Azure AI Search gesendet, das versucht, den relevanten Inhalt zur Beantwortung der Frage zu finden. Anschließend wird dieser Inhalt zusammen mit einem Prompt und der Frage an den GPT-Service gesendet. Es gibt eine sehr schöne Referenzarchitektur von Microsoft:

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

Wenn du diese Lösung ohne Programmierung aufsetzen möchtest, kannst du das ganz einfach über das OpenAI Studio tun.

Das Einzige, was du tun musst, ist einen System-Prompt zu schreiben, um das Modell anzuweisen, und eine Verbindung zu deiner Azure AI Search zu erstellen. Du kannst diesen Service auch über diesen Assistenten bereitstellen. Anschließend findest du oben einen Deploy-Button, der den Service auch für dich auf einem App Service bereitstellt. Das war’s. Ist es nicht einfach, deinen eigenen Copilot zu bauen?

Wie sieht ein professionelleres Konzept aus?

In diesem Konzept erstellst du ein Embedding deiner Inhalte über ein Embedding-Modell. Hier kannst du deine Daten auch vortransformieren, etwa übersetzen, standardisieren, Informationen aus Dokumenten gewinnen und so weiter. Diese Daten werden dann in einer Vektordatenbank gespeichert. Das ist eine vereinfachte Beschreibung, wie man das Wissen speichert.

Wenn der Nutzer nun eine Frage hat, wird diese Frage eingebettet und eine vektorisierte Abfrage auf der Vektor-DB ausgeführt. Der am besten passende Inhalt wird gesammelt und als Grounding zusammen mit der Frage an das Large Language Model gesendet, um die Frage so präzise wie möglich zu beantworten.

Hier findest du eine Beispielarchitektur von Microsoft, wie das funktionieren könnte. Dieses Design nutzt eine Azure Function und einen Azure App Service zusammen mit verschiedenen Azure AI Services (ehemals Cognitive Services).

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

Quelle

Wie kann ich auch eine Websuche in meine App integrieren?

Die Antwort ist ganz einfach. Nutze Bing! In Azure findest du einen Service namens “Bing Resources”. Dieser Service stellt dir eine API für Bing bereit. Hier kannst du deine Frage/deinen Prompt/deinen Suchbegriff an Bing senden und erhältst ein Ergebnis aus nahezu live aktuellen Inhalten aus dem Internet.

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

Wie kann ich eine Lösung zusammen mit Intune bauen

Schau dir meinen Blogbeitrag an, in dem ich ein Tool (GPT Device Troubleshooter) entwickle, das Intune und GPT kombiniert.

https://jannikreinhard.com/2023/09/10/the-magic-of-the-gpt-intune-device-troubleshooter/

Wie sieht die Architektur des M365 Copilot aus?

Graph, Graph und Graph! Es ist die Quelle von allem. Wenn du einen Prompt in einem der Office-Produkte ausführst, geht er an die M365 Chat Engine, die deine Absicht erkennt und eine Abfrage an Graph im Kontext des Nutzers stellt, um den Prompt zu grounden. Anschließend baut sie einen modifizierten Prompt mit Templates und sendet ihn an den OpenAI-Service. Dieser Service beantwortet deine Frage; danach gibt es außerdem einen Nachbearbeitungsschritt, um zum Beispiel Rohdaten an die Antwort anzuhängen, etwa eine Datei oder eine Liste von Daten. Dieses Bündel wird an den Nutzer zurückgesendet.

Hier siehst du das offizielle Bild von Microsoft

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

Das war eine sehr vereinfachte Erklärung, wie die Dinge funktionieren. Du weißt, dass ich Deep Dives mag. Ehrlich gesagt ist das Ganze eine Blackbox, aber lass mich wissen, ob ich dir auch eine Architektur zeigen soll, wie das aussehen könnte und die du nutzen kannst, wenn du einen solch umfassenden Bot bauen möchtest.

Lass mich den Copilot Stack erklären

Der Copilot besteht aus mehreren Schichten. Die erste Schicht ist die Azure-Infrastruktur und das Foundation-Modell selbst. Darüber liegt eine KI-Orchestrierung. Wir werden im nächsten Kapitel ausführlicher darüber sprechen, was das im Detail ist, aber kurz gesagt ist sie das Herzstück des Copilot. Darüber liegt das Frontend, mit der Möglichkeit, den Copilot mit zusätzlichen Add-Ons/Skills/Plugins zu erweitern, nenne sie, wie du willst. Diese Add-Ons haben außerdem eine Komponente innerhalb der Engine.

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

Was ist Orchestrierung?

Zusammengefasst geht es bei der Orchestrierung darum, verschiedene Komponenten und Services nahtlos zu integrieren, Aufgaben zu verwalten, fundierte Entscheidungen zu treffen, effektiv mit Nutzern zu interagieren und kontinuierlich zu lernen und sich anzupassen, um die bestmögliche Unterstützung zu bieten.

Die wichtigsten Aspekte sind:

  1. Integration von Services: Der KI-Copilot muss möglicherweise verschiedene Services und Datenquellen integrieren. Zum Beispiel in einem Fahrkontext, wie die Integration zu Graph, Bing oder generell allen APIs und Datenbanken.
  2. Task-Management: Orchestrierung umfasst das Verwalten und Priorisieren von Aufgaben. Aufgaben könnten das Abrufen von Daten, das Senden von Prompts oder das Ausführen von Aktionen sein.
  3. Entscheidungsfindung: Ein KI-Copilot würde Orchestrierung nutzen, um Entscheidungen auf Basis der Daten zu treffen, die er sammelt und verarbeitet. Es könnte zum Beispiel sein, zu entscheiden, welche Aktion er einem Nutzer vorschlagen sollte.
  4. Nutzerinteraktion: Effiziente Orchestrierung umfasst auch, wie das System mit dem Nutzer interagiert, und stellt sicher, dass die Kommunikation klar, zeitnah und relevant ist.

Meist wird ein LLM-Framework genutzt, um die Orchestrierung durchzuführen

Was sind die gängigsten Frameworks?

Es gibt viele Frameworks, aber ich würde sagen, die gängigsten sind LangChain und Semantic Kernel. Beide sind Open Source.

LangChain

LangChain ist ein Community-Projekt auf GitHub, das beim Erstellen von Chatbots, beim Zusammenfassen von Dokumenten oder beim Analysieren von Code hilfreich ist. So funktioniert es:

  1. Model I/O: Verbindet sich mit Sprachmodellen.
  2. Retrieval: Sammelt die spezifischen Daten, die für die Aufgabe benötigt werden.
  3. Chains: Verknüpft verschiedene Schritte oder Aktionen miteinander.
  4. Agents: Entscheidet, welche Tools verwendet werden, je nachdem, was du tun möchtest.
  5. Memory: Merkt sich, was in vorherigen Interaktionen passiert ist.
  6. Response: Gibt das Endergebnis zurück.

LangChain ist flexibel und unterstützt verschiedene Programmiersprachen wie Python und JavaScript. Es ist wie ein smarter Assistent, der verschiedene Tools nutzen und sich an vergangene Konversationen erinnern kann, um dir beim Aufbau komplexer sprachbasierter Anwendungen zu helfen.

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

Semantic Kernel

Dies ist ebenfalls ein Open-Source-Projekt, das von Microsoft vorangetrieben und genutzt wird. Es ist ein einfacheres Tool, das dir hilft, LLMs mit gängigen Programmiersprachen (wie C# und Python) zu integrieren. So funktioniert es:

  1. Kernel: Verwaltet und organisiert deine Aufgaben.
  2. Memories: Speichert und ruft Informationen ab.
  3. Planner: Wählt die richtigen Tools (oder Plugins) für die Aufgabe aus.
  4. Connectors: Verbindet sich mit externen Datenquellen.
  5. Plugins: Fügt eigene Funktionen in C# oder Python hinzu.
  6. Response: Liefert das Ergebnis.

Semantic Kernel ist leichtgewichtig und konzentriert sich darauf, verschiedene KI-Services nahtlos in deine bestehenden Anwendungen zu integrieren. Es ist, als würdest du deinen Apps eine smarte Schicht hinzufügen, die es ihnen ermöglicht, sich an vergangene Interaktionen zu erinnern und verschiedene KI-Tools effektiv zu nutzen.

Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune
  • Flexibilität: LangChain bietet mehr Flexibilität mit mehr sofort einsatzbereiten Tools und Integrationen, besonders für Python- und JavaScript-Entwickler. Semantic Kernel ist schlanker und konzentriert sich auf die Integration von KI-Services in bestehende Anwendungen, insbesondere für C# und Python.
  • Anwendungsfälle: LangChain ist großartig für komplexere Aufgaben, die das Erinnern an vergangene Interaktionen und das Verknüpfen verschiedener Schritte erfordern. Semantic Kernel ist ideal für einfachere, direktere Integrationen von KI in bestehende Apps.
  • Community: LangChain hat eine starke Community und Unterstützung, besonders da es länger existiert und in verschiedenen Anwendungen eingesetzt wurde. Semantic Kernel, das relativ neuer ist, baut seine Community und Unterstützung weiter aus, vor allem unter Entwicklern, die KI in Enterprise-Anwendungen integrieren möchten.

Dies ist nur ein kurzer Vergleich, aber es gibt noch viele weitere Aspekte, die du berücksichtigen solltest. Am besten probierst du beide aus.

Ich hoffe, das bringt etwas mehr Licht ins Dunkel. Lass mich gerne wissen, ob du noch mehr Deep Dives zu einem bestimmten Thema haben möchtest, dann blogge ich gerne darüber.

23 thoughts on “Wie Copilots funktionieren: LLM-Architektur, Grounding und Intune

Comments are closed.