Wie baut man einen Unternehmensantriebbau?
Wir haben innerhalb von LangChain interne Agenten in den Bereichen Marketing, Vertrieb und Ingenieurung entwickelt, und diese haben die Arbeit dieser Teams völlig verändert. Sie waren nicht einfach zu realisieren. Wir haben viel Zeit damit verbracht, die Probleme zu lösen, die mit einem Mehrspieler-System verbunden sind, und alle Teams kamen auf dieselben Grundprinzipien:
- Er lebt dort, wo die Menschen bereits arbeiten (für uns ist das Slack)
- Es weiß, wer fragt, und handelt für diese Person OBO, um bestimmte Dienstleistungen zu erbringen, und verwendet für andere Personen seine eigene Identität
- Es hat Speicher, der global oder auf Benutzerebene verfügbar ist
- Der Code läuft in einer Sandbox und kann Anfragen an Dienste stellen, die Authentifizierung erfordern
- Ein großer Prozentsatz seiner Aufrufe wird eher durch Planung als durch eine explizite Anweisung von jemandem vorgenommen (ambiente Agenten!!)
Dankeschön an @caspar_br für die Hilfe auf diesem Blog
LangChain-Interne Agenten
Um diese Diskussion zu stützen, eine kurze Übersicht der drei Hauptagenten, die wir bei LangChain haben:
GTM Agent: ein proaktiver, immer aktivierter Agent, der bei GTM-Aktivitäten hilft. Er überwacht und beantwortet E-Mails sowie neue qualifizierte Leads, sendet tägliche Zusammenfassungen und kann Fragen zu Konten beantworten, sowie outbound-Methoden ausführen.
OpenSWE: unser Engineering-Agent kann PRs bearbeiten und erstellen, aber auch Code-Review für alle PRs durchführen.
Content Studio: unser Marketingagent kann Assets (Blogs, Bilder, PowerPoint-Präsentationen, Videos) in unserem Stil und mit Kenntnis unserer Positionierung erstellen.
Alle dieser Agenten werden auf dieselbe Weise aufgebaut. Wir glauben, dass dies eine allgemeine Methode ist, um Unternehmensausrüstungen zu konstruieren.
Problem: Benutzerfreundlichkeit
Alle unsere Agenten leben an Orten, an denen Menschen bereits arbeiten – für uns ist das Slack. Jeder hat seine eigenen Slack-Apps, und kann in einem Kanal per DM oder mit Tags markiert werden. Ein Vorteil der Arbeit mit diesen Agenten in Kanälen ist, dass andere sehen können, wie die Menschen es verwenden.
Eine schöne Ergänzung, die wir hinzugefügt haben, ist das Konzept, dass Agenten in Slack einen eigenen Thread eröffnen können. Oft findet eine gute Unterhaltung statt, und man möchte den Agenten sagen, was er tun soll oder seine Meinung einbringen. Wenn der Agent jedoch in diesen Thread eindringt, würde das die menschliche Konversation verderben und ablenken. Deshalb haben wir eine einfache Möglichkeit geschaffen, damit Agenten einen eigenen Thread im Channel eröffnen können.
Es gibt einige Benutzer-Erfahrungen, die am besten nicht in Slack durchgeführt werden sollten. Zum Beispiel: Wenn der GTM-Agent verlangt, dass ich E-Mails überprüfe, ist es in Ordnung, dies einzeln in Slack zu tun. Aber wenn eine große Last vorliegt, ist es überhaupt keine angenehme Erfahrung, diese über Slack-Messages zu verfolgen. Für solche Erfahrungen haben wir letztendlich eine personalisierte UI entwickelt.
Problem: Identität
Das schwierigste und komplizierteste Problem, mit dem wir es zu tun hatten, war die Identität – genauer gesagt: Wenn diese Agenten Handlungen ausführen, auf welche Personen sie dies im Namen von tun?
Es gibt zwei Hauptmethoden, wie dies in der Industrie behandelt wird:
- On-behalf-of: der Agent handelt im Namen des Benutzers, der den Agenten aufruft
- Fixierte Zugangsdaten: Es gibt eine feste Gruppe von Zugangsdaten, die der Agent verwendet, unabhängig davon, wer ihn aufruft (z. B. ein Service-Konto).
So haben wir es für jeden Agenten geregelt (Dokumente: Hinzufügen der Identität zu Managed Deep Agents, Verwaltung der Verbindungen):
OpenSWE:
- Wenn du ihm eine Nachricht schickst, handelt er im deinen Namen (z. B. öffnet er PRs mit deinem GitHub-Handle)
- Wenn es im Hintergrund läuft (z. B. als Code-Review-Agent), verhält es sich mit seiner eigenen Identität (GitHub-Anwendung)
GTM Agent:
- Es gibt einige Tools (z. B. Salesforce-Zugriff), bei denen eine feste Identität verwendet wird, sodass nicht jeder sich anmelden muss
- Es gibt einige Tools (z. B. E-Mail), bei denen die Agentin im Namen des Benutzers agiert. Diese Tools sind NUR in DMs verfügbar. In geteilten Kanälen sind sie nicht erhältlich.
Content Studio:
- Es gibt einige Tools (z. B. Notion), bei denen der Agent im Namen des Benutzers agiert.
- Es gibt einige Tools (z. B. Twitter), bei denen eine feste Anzahl von Zugangsdaten verwendet werden – in diesem Fall für die Twitter-Konto unseres Unternehmens. Nur eine Liste von gelisteten Benutzern kann hier bestimmte Operationen durchführen. Zum Beispiel kann nicht jeder auf Twitter posten (er kann nur lesen/entwerfen).
Problem: Speicher
Alle Agenten haben zwei Schichten von Speicher:
- Globale Speicher: Speicher, der für alle Benutzer gilt
- Benutzermemo: Memo, das nur für den spezifischen Benutzer gilt
Entscheiden die Agenten, welche Fakten sie in welchem Speicherniveau behalten möchten.
Dies ist wahrscheinlich das am wenigsten erforschte Gebiet bisher – wir haben viel zu tun, das wir hier erledigen müssen!
Problem: Code- Ausführung
Alle drei unserer Agenten können Code schreiben und ausführen – und benötigen oft dies, um Aufgaben zu erledigen. Sie alle folgen dem Muster, dass sie außerhalb des Sandboxes laufen, aber mit ihm verbunden sind und dort Code ausführen. Alle haben leicht unterschiedliche Basis-Images mit verschiedenen Abhängigkeiten. OpenSWE (der Agent, der am meisten mit Programmierung zu tun hat) ist intelligent darin, welches Basis-Image er startet (dies unterscheidet sich je nach Kanal/User). Sie alle nutzen den geheimen Proxy auf LangSmith Sandboxes (siehe auch Hinzufügen eines Sandboxes zu Managed Deep Agents) – um den Agenten die Möglichkeit zu geben, von innen im Sandbox selbst sicher und sicherer mit Diensten zu verbinden.
Problem: Vorausgeplante Ausführungen
Ein großer Prozentsatz der Aktionen wird im Hintergrund durch Ereignisse geplant oder ausgelöst, anstatt direkt vom Benutzer initiiert zu werden.
Einige davon werden vom Entwickler des Agents eingestellt. Zum Beispiel: OpenSWE hört auf PRs und prüft sie, sobald eine neue PR erstellt wird.
Andere davon werden vom Benutzer eingerichtet, indem er den Agenten darum bittet. Zum Beispiel: Ich bat den GTM-Agenten, mir einen täglichen Überblick zu senden, und dieser erstelle seinen eigenen Cron dafür.
Alle basieren auf verwalteten tiefen Agenten
Alle dieser Agenten basieren auf Managed Deep Agents, das auf der offenen Source-Technologie Deep Agents basiert. Es bietet die Infrastruktur, um alle diese Probleme (Kanäle, Crons, Sandboxes, Speicher, Identität) zu lösen, und bietet gleichzeitig genügend Flexibilität, um das Verhalten des Agenten nach Bedarf anzupassen. Probieren Sie es heute mit dem Quickstart aus!