6 Punkte von xguru 2024-12-03 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Anfang 2023 begann LinkedIn damit, ein Produktportfolio mit GenAI-Funktionen auf den Markt zu bringen
  • Die ersten GenAI-Produkte starteten als einfache Erfahrungen nach dem Muster „Prompt eingeben, String ausgeben“ und entwickelten sich zu dialogorientierten Agenten-Erlebnissen mit Unterstützung für Kontextspeicher
  • Durch den Aufbau eines Tech-Stacks für GenAI-Anwendungen wurde ein Ansatz umgesetzt, der die Balance zwischen Time-to-Market und langfristigem Hebel wahrt

Entstehung und Entwicklung

  • Es bestand die Notwendigkeit, ein Framework aufzubauen, das Standardmechanismen für gemeinsame Aufgaben bereitstellt
  • Da der Großteil von LinkedIns Online-Serving-Stack in Java programmiert ist, begann man zunächst mit einem gemeinsamen Java-Midtier
  • Mit zunehmender Zahl von Anwendungsfällen wurde dieses Midtier zu einem Entwicklungs- und Betriebsengpass, weshalb es in mehrere Java-Midtier-Services pro Anwendungsfall aufgeteilt wurde
  • AI-Ingenieur:innen bevorzugen Python für Offline-Workflows auf Basis von LLMs, Prompt Engineering und Evaluierung
  • Kurzfristig entschied man sich dafür, fragmentierte Online- und Offline-Stacks beizubehalten, langfristig jedoch Python auch für Online-Serving zu nutzen
  • Aufbau eines Python-Frameworks für Online-Serving auf Basis des Open-Source-Projekts LangChain
  • Start eines Projekts mit Fokus auf Python, um Python-Support für zentrale Infrastrukturabhängigkeiten zu ermöglichen
  • Das aktuelle Framework für GenAI-Anwendungen ist ein dünner Wrapper über LangChain

Prompt-Management

  • Prompt Engineering ist der wichtigste Mechanismus, um LLMs zu „programmieren“
  • Anfangs wurde manuelle String-Interpolation im Code verwendet, was jedoch fehleranfällig und nicht skalierbar war
  • Einführung einer Prompt-Source-of-Truth-Komponente und Standardisierung auf die Template-Sprache Jinja
  • Die Bibliothek zur Prompt-Auflösung wurde von Java nach Python neu geschrieben
  • Mit dem Aufkommen dialogorientierter UIs wurde mehr Struktur für die Rollen von Mensch und AI in Gesprächen bereitgestellt
  • Am Ende konvergierte man auf die OpenAI Chat Completions API

Aufgabenautomatisierung über Skills

  • Die Skill-Abstraktion wurde auf GenAI-Anwendungen ausgeweitet und als Mechanismus zur Aufgabenautomatisierung genutzt
  • Anfangs wurde dies mit benutzerdefiniertem Code aufgebaut, der interne und externe APIs von LinkedIn mithilfe eines LLM-freundlichen JSON-Schemas kapselte
  • Es traten Probleme wie doppelte Skill-Implementierungen, Änderungen an nachgelagerten Skills und manuelle Skill-Spezifikation durch Entwickler auf
  • Einführung des Konzepts Skill Inversion, sodass nachgelagerte Systeme Skills definieren und der aufrufenden Anwendung bereitstellen
  • Ein zentralisierter Skill-Registry-Service, Build-Plugins und dynamische LangChain-Tools vereinfachten den Zugriff auf Skills sowie Entwicklungs- und Betriebsprozesse
  • Der Tech-Stack entwickelt sich weiter, um schrittweise Skill-Abstraktionen für alle APIs zu erzeugen, damit LLMs nahtlos interagieren können

Kontextbewusstsein und Personalisierung

  • Da LLMs von Haus aus stateless sind, sind Kontextbewusstsein und Personalisierung schwierig
  • Anfangs wurden Couchbase oder Espresso DB als Storage verwendet, und jedes Team war selbst für DB-Setup, Schreiben/Lesen usw. verantwortlich
  • Da das Kontextfenster von LLMs begrenzt ist, wurden semantische Suche mittels Embeddings und Zusammenfassungsfunktionen erforderlich
  • Aufbau einer Infrastruktur für Konversationsspeicher auf Basis des LinkedIn-Messaging-Stacks
  • Einführung des Konzepts Experiential Memory, das aus Erfahrungen der Interaktion zwischen Nutzer:innen und Anwendung abgeleitet wird
  • Integration in das Framework für GenAI-Anwendungen, damit Entwickler:innen dies nahtlos nutzen können

Modellinferenz und Fine-Tuning

  • Anfangs wurden ausschließlich LLMs genutzt, die über den Azure OpenAI Service bereitgestellt wurden
  • Für LinkedIn-spezifische Aufgaben feinabgestimmte LLMs wie Llama zeigten eine ähnliche oder bessere Qualität als kommerzielle Modelle
  • Es wird daran gearbeitet, die Entwicklererfahrung über externe und interne Modelle hinweg transparent zu gestalten
  • Die Inferenzschicht stellt für alle LLMs die OpenAI Chat Completions API bereit
  • Über Konfigurations-Hooks im Anwendungs-Framework kann einfach zwischen On-Premises- und externen Modellen gewechselt werden

Migration

  • Eine schnelle Migration von Legacy-Eigenlösungen zu standardisierten Lösungen ist entscheidend
  • Ein schlankes Team aus Ingenieur:innen mit tiefem Wissen über den Java-Stack und den neuen Stack übernahm die Migration
  • Es wurde ein schrittweiser Ansatz verwendet, bei dem einzelne Komponenten nacheinander migriert wurden
  • Begonnen wurde mit einfachen und kleinen Apps, anschließend ging es zu komplexen und größeren Apps über
  • Senior-Ingenieur:innen wurden mit neuen Python-Entwickler:innen gepaart, damit diese Python direkt in der Praxis lernen konnten

Abschließende Gedanken

  • Der neue Tech-Stack für GenAI-Anwendungen schafft eine solide Grundlage, um AI-first-Entwicklung zu unterstützen und GenAI-Apps effizient und verantwortungsvoll zu bauen
  • Er wird eine wichtige Rolle dabei spielen, die Vision zu verwirklichen, allen Mitgliedern der globalen Arbeitswelt wirtschaftliche Chancen zu eröffnen
  • Es gibt noch viele Herausforderungen, die gelöst werden müssen
  • Da sich die Spitze der Produkterfahrung von dialogorientierten Assistenten zu AI-Agenten verlagert, nehmen neue funktionale und operative Anforderungen stark zu. Auch dazu sollen später weitere Inhalte veröffentlicht werden

Noch keine Kommentare.

Noch keine Kommentare.