LangChain BlogAktualisiert

Skills in Deep Agents überarbeiten

Die wichtigsten Punkte Sie können jetzt Tools an Skills binden. Tool-Schemata bleiben außerhalb des Kontexts, bis der Agent den Skill liest, an den sie gebunden sind, und bei Modellen, die neue Tools

Only a skill's name and description are always in context. The agent reads the instructions on demand, and loads scripts, references, and assets only when needed.
Bildquelle · LangChain Blog

Die wichtigsten Punkte

  • Sie können jetzt Tools an Skills binden. Tool-Schemata bleiben außerhalb des Kontexts, bis der Agent den Skill liest, an den sie gebunden sind, und bei Modellen, die neue Tools mitten in einer Konversation akzeptieren, bleibt durch das Hinzufügen der Prompt-Cache erhalten.
  • Apps können Skills zur Laufzeit anheften, sodass die Anweisungen vor dem ersten Modellaufruf im Kontext sind, ohne read_file Roundtrips.
  • Skills können mitten im Thread neu geladen werden, sodass ein langlebiger Agent hinzugefügte, bearbeitete oder gelöschte Skills übernimmt, ohne einen neuen Thread zu starten.

Skills sind eine der besten Möglichkeiten, einem Agenten Domänenwissen zu vermitteln. Ein Skill ist ein Ordner mit Anweisungen, Skripten und Referenzdateien, der einem Agenten beibringt, wie man Dinge tut – etwa die Vorbereitung auf ein Kundengespräch oder die Auswertung von Anrufprotokollen so, wie es Ihr Vertriebsteam macht. Agent Skills sind ein offener Standard , der mit jedem Modell funktioniert und von Dutzenden Agentenprodukten unterstützt wird. Man muss auch kein Techniker sein, um einen zu schreiben: Im Kern ist ein Skill eine Markdown-Datei.

Skills funktionieren dank progressiver Offenlegung. Der Agent sieht anfangs nur den Namen und die Beschreibung jedes Skills und liest die vollständigen Anweisungen erst, wenn eine Aufgabe sie erfordert. Das hält den Kontext klein, und Context Engineering ist der Schlüssel zum Bau effektiver Agenten.

Mit steigender Nutzung verändern sich die Anforderungen der Teams an Skills. Wir sehen, dass Unternehmens-Skill-Registries auf Tausende von Skills anwachsen, die team- und agentenübergreifend geteilt werden. Wir haben die Skill-Unterstützung in Deep Agents überarbeitet, um einige häufige Anliegen zu adressieren:

  • Binden von Tools an Skills: an einen Skill gebundene Tools werden erst geladen, wenn der Agent diesen Skill liest.
  • Angeheftete Skills: wenn ein Nutzer ausdrücklich einen Skill anfordert, wie /meeting-prep, kann Ihre App ihn vor dem nächsten Modellaufruf laden.
  • Neuladen von Skills: ein langlebiger Thread kann neue oder geänderte Skills übernehmen, ohne neu zu starten.

Wie Skills funktionieren

Ein Skill ist ein Verzeichnis mit einer SKILL.md Datei: YAML-Frontmatter mit name und description, gefolgt von den Anweisungen, denen der Agent folgt. Ein Skill kann auch unterstützende Dateien unter scripts/, references/bündeln, und assets/ (spec).

Only a skill's name and description are always in context. The agent reads the instructions on demand, and loads scripts, references, and assets only when needed.
Nur der Name und die Beschreibung eines Skills befinden sich immer im Kontext. Der Agent liest die Anweisungen bei Bedarf und lädt Skripte, Referenzen und Assets erst, wenn sie benötigt werden.

In diesem Beitrag verwenden wir durchgehend unseren GTM-Agenten als laufendes Beispiel. Er basiert auf Deep Agents, und seine Bibliothek mit mehr als 50 Skills deckt die wiederkehrende Arbeit eines Vertrieblers ab, wie meeting-prep, call-transcripts, und competitive-intel-card.

Skills werden auf drei Ebenen geladen:

  1. Entdeckung. Beim Start sieht der Agent den name und die description jedes Skills in seinem Systemprompt.
  2. Aktivierung. Wenn eine Aufgabe zu einem Skill passt, liest der Agent die vollständige SKILL.md mit read_file.
  3. Ausführung. Der Agent folgt den Anweisungen und liest Skripte oder Referenzdateien nur, wenn diese dazu auffordern.
The agent's context grows only by what the task needs: every skill's name and description at startup, then one skill's instructions, then one reference file.
Der Kontext des Agenten wächst nur um das, was die Aufgabe benötigt: beim Start Name und Beschreibung jedes Skills, dann die Anweisungen eines Skills, dann eine Referenzdatei.

Solange ein Skill nicht verwendet wird, kostet er eine Zeile im Systemprompt, sodass eine Bibliothek Verweise auf eine Fülle von Skills enthalten kann, ohne den Kontext zu überladen. Nun wollen wir uns die Verbesserungen ansehen, die wir an Deep Agents vorgenommen haben.

Tools an Skills binden

Skills sagen einem Agenten oft, wie er bestimmte Tools verwenden soll, und einige Tools funktionieren erst dann richtig, wenn der Agent diese Anweisungen gelesen hat. Bislang wurden Skills und Tools getrennt offengelegt. Man konnte Tool-Schemata mit Tool-Sucheaus dem Kontext heraushalten, aber nichts verknüpfte ein Tool mit dem Skill, der es erklärt: Der Agent konnte ein Tool finden und aufrufen, ohne seinen Skill zu lesen, oder den Skill lesen und trotzdem nach seinen Tools suchen müssen.

Jetzt kann man Tools an einen Skill binden, sodass ein Skill und seine Tools zusammen offengelegt werden. Ein gebundenes Tool wird erst dann zum Kontext hinzugefügt, wenn der Agent seinen Skill liest, und ein Aufruf davor schlägt als unbekanntes Tool fehl. Das hält den Kontext schlank, und es bedeutet, dass der Agent gelesen hat, wie man ein Tool verwendet, bevor er es aufrufen kann. In unserem GTM agent, call-transcripts wird erklärt, wie man Anrufe durchsucht und Transkripte liest, daher ist es der natürliche Ort, um diese Tools zu binden.

Listen Sie die Tools im Frontmatter des Skills unter metadata.include_tools:

call-transcripts SKILL.md frontmatter listing include_tools: search_calls get_transcript

Übergeben Sie diese Tools an SkillsMiddleware statt an den Agenten:

Python: create_deep_agent with SkillsMiddleware(tools=[search_calls, get_transcript])
Reading call-transcripts unlocks search_calls and get_transcript. They arrive in a new system message, so the cached prefix above it stays unchanged.
Das Lesen von call-transcripts schaltet search_calls und get_transcript frei. Sie kommen in einer neuen Systemnachricht an, sodass der darüber liegende zwischengespeicherte Präfix unverändert bleibt.

Das Hinzufügen von Tools mitten in einer Konversation bedeutete früher, die Tool-Liste der Anfrage zu bearbeiten, was den Prompt-Cache ungültig macht. Anthropic und OpenAI lassen neuere Modelle nun Tools mitten in einer Konversation akzeptieren, sodass Deep Agents auf diesen Modellen die gebundenen Tools eines Skills direkt nach dem Lesen des Skills hinzufügt und der zwischengespeicherte Präfix intakt bleibt (Anthropic - und OpenAI -Integrationsdokumentation). Auf anderen Modellen werden die Tools wie bisher an die Anfrage angehängt.

Eine Liste deckt die meisten Skills ab. Für mehr Kontrolle kann ein Skill statt Tool-Namen ein Label auflisten, und eine Funktion, die Sie an SkillsMiddleware übergeben, wandelt jedes Label in Tools um. Das ermöglicht Ihnen:

  • Eine ganze Tool-Gruppe offenzulegen, wie alle Tools auf einem MCP-Server, unter einem Namen, ohne jedes Tool im Skill aufzulisten.
  • Tools an Laufzeit-Berechtigungen zu koppeln. Die Funktion erhält die Runtime des Graphen und kann daher prüfen, wer der Nutzer ist, und nur die Tools zurückgeben, die er verwenden darf.

Hier erhält call-transcripts jedes Tool auf dem calls-MCP-Server, und pipeline-forecast erhält CRM-Tools, aber nur Manager können die Prognose aktualisieren:

SKILL.md frontmatter for call-transcripts (include_tools: call_tools) and pipeline-forecast (include_tools: crm_tools)
Python: resolve_skill_tools returns every calls MCP tool for call_tools, and update_forecast only for managers

Siehe Add tools to skills für mehr Details.

Angepinnte Skills

Manchmal weiß der Nutzer bereits, welchen Skill er möchte. In unserem GTM-Agenten kann ein Vertriebsmitarbeiter /meeting-prep for my Acme call tomorroweingeben. Ohne Pinning sieht das Modell nur die Beschreibung des Skills und muss ihn erst lesen. Das fügt einen zusätzlichen Round Trip hinzu, bevor die Arbeit beginnt, und das Modell lädt nicht garantiert den richtigen Skill. Mit angepinnten Skillsfindet Ihre App die Skill-Namen in der Nachricht (oder parst sie aus einer UI) und übergibt sie in pinned_skills, und die Middleware fügt die Anweisungen jedes Skills vor dem nächsten Modellaufruf zur Konversation hinzu. Deep Agents parst Nachrichten nicht selbst, daher wählen Sie die Syntax:

Typing /meeting-prep names the skill, so the app can pin it for the agent's next model call.
Die Eingabe von /meeting-prep benennt den Skill, sodass die App ihn für den nächsten Modellaufruf des Agenten anpinnen kann.
Python: parse /meeting-prep from the message and pass it as pinned_skills to agent.invoke
A pinned skill's instructions are already in the conversation, so the agent starts the work on model call 1 instead of model call 2.
Die Anweisungen eines angepinnten Skills sind bereits in der Konversation vorhanden, sodass der Agent die Arbeit bei Modellaufruf 1 statt bei Modellaufruf 2 beginnt.

Das reduziert die Latenz und macht das Verhalten vorhersehbarer: Die Anweisungen sind garantiert im Kontext enthalten, und die gebundenen Tools eines angehefteten Skills kommen mit ihm. Jeder angeheftete Skill wird einmalig als getaggte Nachricht hinzugefügt, sodass frühere Nachrichten sich nie ändern, der Prompt-Cache gültig bleibt und eine Chat-UI den Skill als Label statt als vollständigen Text anzeigen kann.

Skills während eines laufenden Threads neu laden

Skills werden am Anfang jedes Threads geladen und im Agent-Zustand gespeichert, sodass jeder spätere Zug denselben Skillsatz wiederverwendet. Sie können diese Liste jetzt ungültig machen , indem Sie skills_metadata auf None setzen, wenn Sie den Agenten aufrufen. Fügt ein Teammitglied einen competitive-intel-card Skill zur Bibliothek hinzu, kann die Anwendung beschließen, die Liste der Skills ungültig zu machen, und der nächste Durchlauf durchsucht jede Quelle erneut:

Python: agent.invoke with skills_metadata set to None
Setting skills_metadata to None makes the next run rescan the skill library and pick up a skill added since the last run.
Wenn man skills_metadata auf None setzt, durchsucht der nächste Lauf die Skill-Bibliothek erneut und übernimmt einen Skill, der seit dem letzten Lauf hinzugefügt wurde.

Ein Neuladen, das neue Skills findet, ändert den Systemprompt, was den Prompt-Cache ungültig macht. Bei einem Thread, der länger untätig war, ist diese Kosten meist bereits gezahlt: Provider-Caches laufen typischerweise innerhalb von Minuten bis zu einer Stunde Inaktivität ab (Anthropic, OpenAI), sodass der Cache kalt ist, bis der Mitarbeiter zurückkommt.

Da der Reset nur eine Eingabe an den Lauf ist, können Sie die Kontrolle auch an Benutzer übergeben. Zum Beispiel über einen /reload Befehl auf der Client-Seite:

Sie können auch von update_state oder aus Middleware heraus zurücksetzen, sodass Ihre Anwendung steuert, wann ein Neuladen der Skills erfolgt. Siehe Reload skills.

Get started

Skills sind der branchenübliche Mechanismus, um einen Agenten mit strukturiertem Domänenwissen auszustatten. Diese Updates machen den Betrieb im großen Maßstab einfacher: Tools werden nur geladen, wenn ein Skill sie benötigt, die von einem Workflow benötigten Skills werden vorab geladen, und lang laufende Threads bleiben aktuell, wenn sich Ihre Bibliothek ändert. Und da Skills ein offener Standard sind, funktionieren die von Ihrem Team geschriebenen Skills modell- und agentenübergreifend.

Alle diese Funktionen sind in der neuesten deepagentsverfügbar. Lesen Sie die Skills-Dokumentation , um loszulegen, und teilen Sie uns Ihre Meinung mit – über GitHub-Issues, das Forumoder auf X.

Danksagungen

Dank geht an Rich Scarrott für die Leitung der Entwicklung dieser neuen Funktionen und an Hunter Lovell für die Überprüfung des Features und des Blogbeitrags!

Originalquelle

LangChain Blog

Hinweise zum Inhalt

Originalveröffentlichung und Rechte liegen bei der Quelle.

Maschinelle Übersetzung · Original beachten