StartseiteArtikel

Kontext-Engineering-Richtlinien

神译局2025-08-11 07:06
Die Prompt-Engineering wird als Kontext-Engineering neu vermarktet.

Das "Divine Translation Bureau" ist ein Übersetzungsteam von 36Kr, das sich auf Technologie, Geschäft, Arbeitsplatz und Lebensbereiche konzentriert und vor allem neue Technologien, neue Ansichten und neue Trends aus dem Ausland vorstellt.

Herausgeberhinweis: Die Prompt-Engineering entwickelt sich zur Kontext-Engineering! Dieser Artikel zeigt anhand eines n8n-Agentenfalls auf, dass strukturierte Ausgabe, dynamische Zeitinjektion und die Optimierung des RAG-Caches die drei Kernmaßnahmen zur Steigerung der Effizienz von LLMs geworden sind. Der Artikel ist eine Übersetzung.

Was ist Kontext-Engineering?

Vor einigen Jahren behaupteten viele Spitzen-AI-Forscher sogar, dass die Prompt-Engineering an diesem Punkt schon längst vergehen sollte.

Offensichtlich war diese Schlussfolgerung völlig falsch. Tatsächlich ist die Prompt-Engineering heute wichtiger als je zuvor.

So wichtig, dass dieses Konzept jetzt als "Kontext-Engineering" neu verpackt wird.

Ja, es ist wieder ein schickes Schlagwort, um den Schlüsselprozess der Anpassung der Anweisungen und des zugehörigen Hintergrunds für die Ausführung von Aufgaben durch Large Language Models (LLMs) zu beschreiben.

Es gibt bereits viele Diskussionen über das Kontext-Engineering (Ankur Goyal, Walden Yan, Tobi Lutke, Andrej Karpathy usw.), aber ich möchte meine eigenen Ansichten teilen und die praktische Anwendung des Kontext-Engineerings anhand der konkreten Schritte bei der Entwicklung eines AI-Agenten-Workflows zeigen.

Obwohl ich nicht sicher weiß, wer das Wort "Kontext-Engineering" zuerst geprägt hat, werden wir anhand dieses Diagramms von Dex Horthy seinen Inhalt kurz erläutern.

Ich persönlich bevorzuge den Begriff "Kontext-Engineering", da er den Kern der Prompt-Engineering und die damit verbundenen Aufgaben umfassender abdeckt.

Die Professionalität der Prompt-Engineering wird oft in Frage gestellt, da viele Menschen sie mit "blinden Prompts" (z. B. kurzen Aufgabenbeschreibungen, die in einem großen Modell wie ChatGPT eingegeben werden) verwechseln.

Ein blinder Prompt ist nur eine Frage an das System, während die Prompt-Engineering die sorgfältige Gestaltung des Kontexts und der Struktur des Prompts erfordert – vielleicht hätte sie schon früher Kontext-Engineering heißen sollen.

Das Kontext-Engineering ist ein fortgeschrittenerer Schritt: Sie müssen eine vollständige Kontextarchitektur entwerfen, was oft die Erhebung, Verstärkung und Optimierung von Systemwissen durch rigorose Methoden erfordert, und nicht einfach durch einen einfachen Prompt erreicht werden kann.

Aus der Sicht eines Entwicklers ist das Kontext-Engineering der Prozess der Optimierung von Anweisungen und Kontext durch einen iterativen Prozess, um das LLM zum Erreichen des gewünschten Ziels zu bringen.

Dies umfasst die Einrichtung eines Bewertungsverfahrens, um die Wirksamkeit der Strategie zu messen.

Angesichts der schnellen Entwicklung im Bereich AI schlage ich vor, die Definition des Kontext-Engineerings zu erweitern: Der Prozess der Gestaltung und Optimierung von Anweisungen und zugehörigem Kontext für LLMs und fortschrittliche AI-Modelle, damit sie Aufgaben effizient ausführen können.

Diese Definition umfasst nicht nur textbasierte LLMs, sondern auch die zunehmend verbreiteten Kontextoptimierungen für multimodale Modelle.

Das Kontext-Engineering beinhaltet die Prompt-Engineering sowie die folgenden verwandten Prozesse:

  • Entwurf und Verwaltung von Prompt-Ketten (falls zutreffend)

  • Debugging von Anweisungen/System-Prompts

  • Verwaltung dynamischer Elemente des Prompts (z. B. Benutzereingabe, Datum und Uhrzeit usw.)

  • Suche und Vorbereitung von relevantem Wissen (d. h. RAG)

  • Abfrageverstärkung

  • Definition und Beschreibung von Tools (im Szenario eines Agentensystems)

  • Vorbereitung und Optimierung von Few-Shot-Demonstrationen

  • Strukturierte Eingabe und Ausgabe (z. B. Trennzeichen/JSON-Format)

  • Kurzzeitgedächtnis (Verwaltung von Zustand/historischem Kontext) und Langzeitgedächtnis (Abruf von relevantem Wissen aus einer Vektordatenbank)

  • Und andere Techniken zur Optimierung von System-Prompts für LLMs

Kurz gesagt, das Ziel des Kontext-Engineerings ist die Optimierung der Informationen, die in das Kontextfenster des LLMs eingegeben werden.

Dies bedeutet auch, dass Rauscheninformationen gefiltert werden müssen – dies ist an sich eine Kunst und erfordert eine systematische Messung der Leistung des LLMs.

Obwohl alle über das Kontext-Engineering sprechen, werden wir im Folgenden anhand eines praktischen Beispiels der Erstellung eines AI-Agenten die Praxis erleben.

Praktische Anwendung des Kontext-Engineerings

Schauen wir uns ein konkretes Beispiel an, wie ich kürzlich das Kontext-Engineering für eine selbst erstellte Multi-Agenten-Anwendung für tiefergehende Forschungen umgesetzt habe.

Dieser Agenten-Workflow wurde mit n8n entwickelt (aber die Wahl des Tools spielt keine Rolle), und die vollständige Architektur sieht wie folgt aus:

Der "Suchplanungsagent" im Workflow ist für die Generierung eines Suchplans basierend auf der Benutzerabfrage verantwortlich.

Hier ist der System-Prompt, der für diesen Unter-Agenten geschrieben wurde:

Sie sind ein professioneller Forschungsplaner. Ihre Aufgabe ist es, komplexe Forschungsabfragen (eingeschlossen zwischen <user_query></user_query>) in konkrete Such-Unteraufgaben aufzuteilen, wobei jede Unteraufgabe sich auf verschiedene Aspekte oder Quellenarten konzentriert.

Aktuelles Datum und Uhrzeit: {{ $now.toISO() }}

Jede Unteraufgabe muss Folgendes enthalten:

1. Eindeutige Zeichenkette-ID für die Unteraufgabe (z. B. 'subtask_1', 'news_update')

2. Konkrete Suchanweisung, die sich auf einen Aspekt der Hauptabfrage konzentriert

3. Art der Suchquelle (Web/News/Akademie/Spezialbibliothek)

4. Zeitraum (Heute/Letzte Woche/Kürzlich/Letztes Jahr/Zeitunabhängig)

5. Anwendungsbereich (Technologie/Wissenschaft/Gesundheit usw.)

6. Priorität (1 höchste - 5 niedrigste)

Mit Ausnahme von time_period und domain_focus, die optional sein können, sind alle anderen Felder (id/query/source_type/time_period/domain_focus/priority) erforderlich.

Erstellen Sie 2 Unteraufgaben, die zusammen das Thema umfassend abdecken und sich auf verschiedene Informationsdimensionen oder Quellen konzentrieren.

Nachdem Sie die Informationen zur Unteraufgabe erhalten haben, müssen Sie zwei Felder hinzufügen: start_date und end_date. Bitte leiten Sie den Datumsbereich anhand des aktuellen Datums und des ausgewählten time_period ab. Ein Beispiel für das Format ist wie folgt:

"start_date": "2024-06-03T06:00:00.000Z",

"end_date": "2024-06-11T05:59:59.999Z",

Bei diesem Prompt müssen viele Aspekte sorgfältig überdacht werden: Welchen konkreten Kontext sollten wir eigentlich bereitstellen, damit der Planungsagent die Aufgabe effizient ausführen kann? Wie Sie sehen können, erfordert dies nicht nur die Gestaltung eines einfachen Prompts oder einer Anweisung, sondern auch einen experimentellen Geist und die Bereitstellung des Schlüsselkontexts für das Modell, um die Ausführung der Aufgabe zu optimieren.

Lassen Sie uns nun die Kernbestandteile eines effektiven Kontext-Engineerings zerlegen.

Anweisungen

Anweisungen sind die obersten Betriebsanleitungen für das System.

"Sie sind ein professioneller Forschungsplaner. Ihre Aufgabe ist es, komplexe Forschungsabfragen (eingeschlossen zwischen <user_query></user_query>) in konkrete Such-Unteraufgaben aufzuteilen, wobei jede Unteraufgabe sich auf verschiedene Aspekte oder Quellenarten konzentriert."

Viele Anfänger und sogar erfahrene AI-Entwickler könnten an diesem Punkt aufhören. Nach dem Lesen des vollständigen Prompts werden Sie verstehen, wie viel zusätzlicher Kontext erforderlich ist, damit das System wie erwartet funktioniert – dies ist der Kern des Kontext-Engineerings: Das System sollte das Problemumfeld und die konkreten Anforderungen klar verstehen.

Benutzereingabe

Die Benutzereingabe wird im System-Prompt nicht gezeigt, aber hier ist ein Beispiel:

<user_query>Was sind die neuesten Entwicklungen von OpenAI?</user_query>

Beachten Sie die Verwendung von Trennzeichen, die die Prompt-Struktur klarer machen. Dies ist wichtig: Es kann Verwechslungen vermeiden und die Benutzereingabe und die vom System generierte Ausgabe klar trennen. Manchmal ist der Typ der Eingabeinformation direkt mit dem Inhalt verknüpft, den wir vom Modell ausgeben lassen möchten (z. B. ist die Abfrage die Eingabe und die Unterabfrage die Ausgabe).

Strukturierte Eingabe und Ausgabe

Außer den obersten Anweisungen und der Benutzereingabe haben Sie vielleicht bemerkt, dass ich viel Zeit und Mühe darauf verwendet habe, die detaillierten Anforderungen an die Generierung von Unteraufgaben durch den Planungsagenten zu definieren:

Für jede Unteraufgabe sollten Sie Folgendes bereitstellen:

1. Eine eindeutige Zeichenkette-ID für die Unteraufgabe (z. B. 'subtask_1', 'news_update')

2. Eine konkrete Suchanweisung, die sich auf einen Aspekt der Hauptabfrage konzentriert

3. Die Art der Suchquelle (Web, News, Akademie, Spezialbibliothek)

4. Zeitraum (Heute, Letzte Woche, Kürzlich, Letztes Jahr, Zeitunabhängig)

5. Anwendungsbereich, falls zutreffend (Technologie, Wissenschaft, Gesundheit usw.)

6. Prioritätsebene (1 höchste - 5 niedrigste)

       

Alle Felder (id, query, source_type, time_period, domain_focus, priority) sind für jede Unteraufgabe erforderlich, mit Ausnahme von time_period und domain_focus, die optional sein können, wenn sie nicht zutreffen.

       

Erstellen Sie 2 Unteraufgaben, die zusammen das Thema umfassend abdecken. Konzentrieren Sie sich auf verschiedene Aspekte, Perspektiven oder Informationsquellen.

Schauen Sie sich diese Anweisungen genau an, und Sie werden feststellen, dass ich speziell die Feldstruktur geplant habe, die der Planungsagent generieren soll, und den Datengenerierungsprozess durch ein Prompt-Beispiel geleitet habe. Dieser zusätzliche Kontext ist für die Klarstellung der Erwartungen von entscheidender Bedeutung – wenn die Priorität nicht als 1 - 5 Stufen angegeben wird, könnte das System möglicherweise standardmäßig eine Skala von 1 - 10 verwenden. Die Details des Kontexts entscheiden über den Erfolg!

Nun sprechen wir über die strukturierte Ausgabe. Um eine stabile Ausgabe des Planungsagenten zu erhalten, haben wir auch eine Kontextbeschreibung über das Format der Unteraufgabe und den Feldtyp bereitgestellt. Hier ist ein Beispiel für zusätzlichen Kontext, der an den Agenten übermittelt wird, um die erwartete Ausgabe zu klarstellen:

Jede Unteraufgabe muss die folgenden Informationen enthalten:

id: str 

query: str 

source_type: str# Z. B.: "Web", "News", "Akademie", "Spezialbibliothek"

time_period: Optional[str] = None# Z. B.: "Heute", "Letzte Woche", "Kürzlich", "Letztes Jahr", "Zeitunabhängig"

domain_focus: Optional[str] = None# Z. B.: "Technologie", "Wissenschaft", "Gesundheit"

priority: int# 1 (höchste) bis 5 (niedrigste)

Darüber hinaus kann in n8n ein Tool-Ausgabe-Parser verwendet werden, um die endgültige Ausgabe zu strukturieren. Mein Ansatz ist die Bereitstellung eines JSON-Beispiels wie folgt:

{

  "subtasks": [

    {

      "id": "openai_latest_news",

      "query": "latest OpenAI announcements and news",

      "source_type": "news",

      "time_period": "recent",

      "domain_focus":