Startseite / Artikel

Von Grund auf reagieren: Gedanke, Handlung, Pause, Beobachtung ohne Rahmenwerk

Ein winziger ReAct-Loop, der von Hand auf Groq erstellt wurde: Gedanke, Handlung, Pause, Beobachtung – zunächst manuell, anschließend Aufrufe von Regex-Tools – wodurch LLM-Agent-Frameworks Sinn ergeben.

Verlag: REACTAPP.TOP6 Min. Lesezeit1373 Wörter

Quellen: The Origins of AI Agents -How ReAct Rewired the Way LLMs Think and Act

Einführung

Fragen Sie ein Modell in einfachem Sprachstil nach dem aktuellen Preis von Nvidia sowie nach der Anzahl an Aktien, die man mit 100.000 Dollar kaufen kann. Ohne spezielle Tools erfindet es einen veralteten Kurs aus den Trainingsdaten und teilt bei falschen Eingaben zwar korrekt, hat aber keine eingebaute Funktion, die besagt „Ich weiß es nicht – schauen Sie nach“, da eine Suche kein einzelner Durchlauf ist.

Sobald die Qualität der Antworten stieg, erwiesen sich die Modelle als nützlich für einmaliges Reasoning. Allein das Planen garantiert noch keine Autonomie. Die Fragen, die Agenten definieren, lauten: Was liegt außerhalb des Wissens des Modells, welche Aktion führt dazu, wie erzielt man ein Ergebnis, wie überarbeitet man den Plan und wann sollte man aufhören. Entscheidung → Handlung → Überprüfung → Neuplanung ist ein Loop, keine gerade Linie. Dieser Loop ist der Ursprung moderner KI-Agenten. ReAct (Reason + Act) legte das Muster fest. Die ursprünglichen Demonstrationen waren keine LangChain-Apps – es handelte sich um ein LLM, eine strukturierte Anfrage sowie einen Menschen (oder später ein Skript), der Aktionen ausführte und Beobachtungen zurückgab.

Einführung in ReAct: Reasoning + Act

Ein funktionierendes Beispiel, Schritt für Schritt:

from groq import Groq
import re
from dotenv import load_dotenv

_ = load_dotenv()
client = Groq()
message = client.chat.completions.create(
    model="openai/gpt-oss-120b",  # free, fast open-weight model hosted on Groq
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "Hello, GPT!"}
    ],
)
print(message.choices[0].message.content) # Check the client
class Agent:
    def __init__(self, system=""):
        self.system = system
        self.messages = []
        if self.system:
            self.messages.append({"role": "system", "content": system})

    def __call__(self, message):
        self.messages.append({"role": "user", "content": message})
        result = self.execute()
        self.messages.append({"role": "assistant", "content": result})
        return result

    def execute(self):
        response = client.chat.completions.create(
            model="openai/gpt-oss-120b",
            max_tokens=1000,
            messages=self.messages,
        ).choices[0].message.content
        return response
prompt = """
You run in a loop of Thought, Action, PAUSE, Observation.
At the end of the loop you output an Answer
Use Thought to describe your thoughts about the question you have been asked.
Use Action to run one of the actions available to you - then return PAUSE.
Observation will be the result of running those actions.

Your available actions are:

calculate:
e.g. calculate: 4 * 7 / 3
Runs a calculation and returns the number - uses Python so be sure to use floating point syntax if necessary

fish_weight:
e.g. fish_weight: Shark
returns weight of a fish when given the breed

Example session:

Question: How much does a shark weigh?
Thought: I should look the fish weight using fish_weight
Action: fish_weight: Shark
PAUSE

You will be called again with this:

Observation: A Great white shark weights 41000 lbs

You then output:

Answer: A Great white shark weights 41000 lbs
""".strip()
def calculate(expression):
    return eval(expression)

def fish_weight(name):
    if "Shark" in name:
        return("Great white shark weighs 41000 lbs")
    elif "Puffer" in name:
        return("A puffer fish weighs 20 lbs")
    else:
        return("A fish can weight upto 47000 lbs")

known_actions = {
    "calculate": calculate,
    "fish_weight": fish_weight
}
abot = Agent(prompt)
result = abot("How much does a Shark weigh?")
print(result)
result = fish_weight("Shark")
result
next_prompt = "Observation: {}".format(result)
abot(next_prompt)
abot.messages # View the list of messages containing the conversation
# Present a compund query
abot = Agent(prompt)
# New query
question = """I have 2 fishes, a Shark and a puffer fish. \
What is their combined weight"""
abot(question)
next_prompt = "Observation: {}".format(fish_weight("Shark"))
print(next_prompt)
abot(next_prompt)
next_prompt = "Observation: {}".format(fish_weight("Puffer fish"))
print(next_prompt)
abot(next_prompt)
next_prompt = "Observation: {}".format(eval("41000 + 20"))
print(next_prompt)
abot(next_prompt)
## Add loop (automate the reasoning + act process)
action_re = re.compile('^Action: (\w+): (.*)
) # python regular expression to selection action
def query(question, max_turns=5):
    i = 0
    bot = Agent(prompt)
    next_prompt = question
    while i < max_turns:
        i += 1
        result = bot(next_prompt)
        print(result)
        actions = [
            action_re.match(a)
            for a in result.split('\n')
            if action_re.match(a)
        ]
        if actions:
            # There is an action to run
            action, action_input = actions[0].groups()
            if action not in known_actions:
                raise Exception("Unknown action: {}: {}".format(action, action_input))
            print(" -- running {} {}".format(action, action_input))
            observation = known_actions[action](action_input)
            print("Observation:", observation)
            next_prompt = "Observation: {}".format(observation)
        else:
            return
question = """I have 2 fishes, a Shark and a puffer fish. \
What is their combined weight"""
query(question)
  1. Importieren Sie den Groq-Client, re für das Mustererkennung und load_dotenv; laden Sie die Umgebungsvariablen, damit der API-Schlüssel nicht hardcodet ist.
  2. Erstellen Sie einen Groq-Client, der GROQ_API_KEY aus der Umgebung abruft.
  3. Senden Sie eine einfache „Hello“-Nachricht an ein konfiguriertes Modell, um die Verbindbarkeit zu überprüfen.
  4. Bauen Sie einen Agent auf, der eine Systemanweisung sowie eine wachsende Nachrichtenhistorie speichert: Jeder Aufruf fügt den Benutzereingang hinzu, sendet die gesamte Historie, fügt die Modellantwort hinzu und gibt den Text zurück.
  • Schreiben Sie den Systemprompt, der Thought → Action → PAUSE → Observation vorschreibt.
  • Registrieren Sie Tools wie calculate() für Arithmetik und fish_weight() für eine kleine Abfristabelle in known_actions.
  • Instanziieren Sie den Agenten mit dem ReAct-Systemprompt.
  • Fragen Sie „Wie viel wiegt ein Hai?“ Erwarten Sie einen Vorschlag von Action: fish_weight: Shark statt einer reinen Zahl.
  • Führen Sie manuell fish_weight("Shark") aus und speichern Sie das Ergebnis (zunächst im Manuellmodus).
  • Geben Sie Observation: … zurück, damit der Agent antworten kann.
  • Prüfen Sie abot.messages, um den vollständigen Transkript zu sehen, den das Modell erhält.
  • Starten Sie einen neuen Agenten mit einer zusammengesetzten Frage (Gewichte von Hai und Quallenfisch). 13–15. Geben Sie manuell jede Beobachtung ein, einschließlich des gesamten Summenwerts bei Bedarf.
  • Lassen Sie den Agenten, sobald Beobachtungen vorliegen, die kombinierte Antwort erstellen.
  • Fügen Sie eine Regex hinzu, die automatisch Action: name: input erkennt.
  • Umhüllen Sie die Schleife mit query(): neuer Agent, Frage senden, Ausgabe ausgeben, Aktion parsen, gegen known_actions überprüfen, ausführen, beobachten, wiederholen bis zur endgültigen Antwort oder bis zum Schrittlimit.
  • Führen Sie query() auf der zusammengesetzten Frage aus und verfolgen Sie den Ablauf Thought → Action → Observation → Answer ohne manuelle Schritte.
  • Fazit

    Agenten beginnen mit einer Schleife, nicht mit einem Framework. Chain-of-Thought brachte Modellen bei, laut zu denken; ReAct strukturiert das Denken–Handeln–Beobachten nach der Arbeitsweise von Menschen. Populäre Agenten-Frameworks industrialisieren diese Idee. Wenn man die Schleife von Hand aufbaut, ändert sich dauerhaft das Gefühl bezüglich der Frameworks. Die ursprüngliche Veröffentlichung befindet sich unter https://arxiv.org/abs/2210.03629.

    Die wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeitumgebung darf nur aufgelistete Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.

    Die wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeitumgebung darf nur aufgelistete Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.

    Die wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeit muss nur genehmigte Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.

    Die wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeit muss nur genehmigte Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.

    ) # python regular expression to selection action\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E \u003Cpre\u003E\u003Ccode class=\"language-python\"\u003Edef query(question, max_turns=5):\n i = 0\n bot = Agent(prompt)\n next_prompt = question\n while i < max_turns:\n i += 1\n result = bot(next_prompt)\n print(result)\n actions = [\n action_re.match(a)\n for a in result.split('\\n')\n if action_re.match(a)\n ]\n if actions:\n # There is an action to run\n action, action_input = actions[0].groups()\n if action not in known_actions:\n raise Exception("Unknown action: {}: {}".format(action, action_input))\n print(" -- running {} {}".format(action, action_input))\n observation = known_actions[action](action_input)\n print("Observation:", observation)\n next_prompt = "Observation: {}".format(observation)\n else:\n return\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E \u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Equestion = """I have 2 fishes, a Shark and a puffer fish. \\\nWhat is their combined weight"""\nquery(question)\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E \u003Col\u003E \u003Cli\u003EImportieren Sie den Groq-Client, \u003Ccode\u003Ere\u003C\u002Fcode\u003E für das Mustererkennung und \u003Ccode\u003Eload_dotenv\u003C\u002Fcode\u003E; laden Sie die Umgebungsvariablen, damit der API-Schlüssel nicht hardcodet ist.\u003C\u002Fli\u003E \u003Cli\u003EErstellen Sie einen Groq-Client, der \u003Ccode\u003EGROQ_API_KEY\u003C\u002Fcode\u003E aus der Umgebung abruft.\u003C\u002Fli\u003E \u003Cli\u003ESenden Sie eine einfache „Hello“-Nachricht an ein konfiguriertes Modell, um die Verbindbarkeit zu überprüfen.\u003C\u002Fli\u003E \u003Cli\u003EBauen Sie einen \u003Ccode\u003EAgent\u003C\u002Fcode\u003E auf, der eine Systemanweisung sowie eine wachsende Nachrichtenhistorie speichert: Jeder Aufruf fügt den Benutzereingang hinzu, sendet die gesamte Historie, fügt die Modellantwort hinzu und gibt den Text zurück.\u003C\u002Fli\u003E \u003C\u002Fol\u003E\u003Cli\u003ESchreiben Sie den Systemprompt, der Thought → Action → PAUSE → Observation vorschreibt.\u003C\u002Fli\u003E \u003Cli\u003ERegistrieren Sie Tools wie \u003Ccode\u003Ecalculate()\u003C\u002Fcode\u003E für Arithmetik und \u003Ccode\u003Efish_weight()\u003C\u002Fcode\u003E für eine kleine Abfristabelle in \u003Ccode\u003Eknown_actions\u003C\u002Fcode\u003E.\u003C\u002Fli\u003E \u003Cli\u003EInstanziieren Sie den Agenten mit dem ReAct-Systemprompt.\u003C\u002Fli\u003E \u003Cli\u003EFragen Sie „Wie viel wiegt ein Hai?“ Erwarten Sie einen Vorschlag von \u003Ccode\u003EAction: fish_weight: Shark\u003C\u002Fcode\u003E statt einer reinen Zahl.\u003C\u002Fli\u003E \u003Cli\u003EFühren Sie manuell \u003Ccode\u003Efish_weight("Shark")\u003C\u002Fcode\u003E aus und speichern Sie das Ergebnis (zunächst im Manuellmodus).\u003C\u002Fli\u003E \u003Cli\u003EGeben Sie \u003Ccode\u003EObservation: …\u003C\u002Fcode\u003E zurück, damit der Agent antworten kann.\u003C\u002Fli\u003E \u003Cli\u003EPrüfen Sie \u003Ccode\u003Eabot.messages\u003C\u002Fcode\u003E, um den vollständigen Transkript zu sehen, den das Modell erhält.\u003C\u002Fli\u003E \u003Cli\u003EStarten Sie einen neuen Agenten mit einer zusammengesetzten Frage (Gewichte von Hai und Quallenfisch).\n13–15. Geben Sie manuell jede Beobachtung ein, einschließlich des gesamten Summenwerts bei Bedarf.\u003C\u002Fli\u003E\u003Cli\u003ELassen Sie den Agenten, sobald Beobachtungen vorliegen, die kombinierte Antwort erstellen.\u003C\u002Fli\u003E \u003Cli\u003EFügen Sie eine Regex hinzu, die automatisch \u003Ccode\u003EAction: name: input\u003C\u002Fcode\u003E erkennt.\u003C\u002Fli\u003E \u003Cli\u003EUmhüllen Sie die Schleife mit \u003Ccode\u003Equery()\u003C\u002Fcode\u003E: neuer Agent, Frage senden, Ausgabe ausgeben, Aktion parsen, gegen \u003Ccode\u003Eknown_actions\u003C\u002Fcode\u003E überprüfen, ausführen, beobachten, wiederholen bis zur endgültigen Antwort oder bis zum Schrittlimit.\u003C\u002Fli\u003E \u003Cli\u003EFühren Sie \u003Ccode\u003Equery()\u003C\u002Fcode\u003E auf der zusammengesetzten Frage aus und verfolgen Sie den Ablauf Thought → Action → Observation → Answer ohne manuelle Schritte.\u003C\u002Fli\u003E \u003C\u002Fol\u003E \u003Ch2\u003EFazit\u003C\u002Fh2\u003E \u003Cp\u003EAgenten beginnen mit einer Schleife, nicht mit einem Framework. Chain-of-Thought brachte Modellen bei, laut zu denken; ReAct strukturiert das Denken–Handeln–Beobachten nach der Arbeitsweise von Menschen. Populäre Agenten-Frameworks industrialisieren diese Idee. Wenn man die Schleife von Hand aufbaut, ändert sich dauerhaft das Gefühl bezüglich der Frameworks. Die ursprüngliche Veröffentlichung befindet sich unter https:\u002F\u002Farxiv.org\u002Fabs\u002F2210.03629.\u003C\u002Fp\u003E\u003Cp\u003EDie wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeitumgebung darf nur aufgelistete Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.\u003C\u002Fp\u003E \u003Cp\u003EDie wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeitumgebung darf nur aufgelistete Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.\u003C\u002Fp\u003E\u003Cp\u003EDie wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeit muss nur genehmigte Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.\u003C\u002Fp\u003E \u003Cp\u003EDie wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeit muss nur genehmigte Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.\u003C\u002Fp\u003E ","showLangNote":false,"schemaTitle":"Von Grund auf reagieren: Gedanke, Handlung, Pause, Beobachtung ohne Rahmenwerk","schemaDescription":"Ein winziger ReAct-Loop, der von Hand auf Groq erstellt wurde: Gedanke, Handlung, Pause, Beobachtung – zunächst manuell, anschließend Aufrufe von Regex-Tools – wodurch LLM-Agent-Frameworks Sinn ergeben.","contentLanguage":"de","sources":[{"title":"The Origins of AI Agents -How ReAct Rewired the Way LLMs Think and Act","url":"https:\u002F\u002Fmedium.com\u002F@khanejasamridh\u002Fthe-origins-of-ai-agents-how-react-rewired-the-way-llms-think-and-act-731895739b4f"}],"related":[{"slug":"introduction-to-mcp-from-fragmentation-to-shared-tool-servers","title":"Einführung in MCP: Von der Fragmentierung zu gemeinsamen Tool-Servern"},{"slug":"mcp-from-scratch-part-3-connect-a-client-to-your-server","title":"MCP Von Grund auf Teil 3: Einen Client mit Ihrem Server verbinden"},{"slug":"ai-agents-for-future-engineers-memory-tools-and-control-loops","title":"KI-Agenten für zukünftige Ingenieure: Speicher, Werkzeuge und Steuerungsschleifen"}]}},"actionData":null,"errors":null} ) # python regular expression to selection action
    def query(question, max_turns=5):
        i = 0
        bot = Agent(prompt)
        next_prompt = question
        while i < max_turns:
            i += 1
            result = bot(next_prompt)
            print(result)
            actions = [
                action_re.match(a)
                for a in result.split('\n')
                if action_re.match(a)
            ]
            if actions:
                # There is an action to run
                action, action_input = actions[0].groups()
                if action not in known_actions:
                    raise Exception("Unknown action: {}: {}".format(action, action_input))
                print(" -- running {} {}".format(action, action_input))
                observation = known_actions[action](action_input)
                print("Observation:", observation)
                next_prompt = "Observation: {}".format(observation)
            else:
                return
    
    question = """I have 2 fishes, a Shark and a puffer fish. \
    What is their combined weight"""
    query(question)
    
    1. Importieren Sie den Groq-Client, re für das Mustererkennung und load_dotenv; laden Sie die Umgebungsvariablen, damit der API-Schlüssel nicht hardcodet ist.
    2. Erstellen Sie einen Groq-Client, der GROQ_API_KEY aus der Umgebung abruft.
    3. Senden Sie eine einfache „Hello“-Nachricht an ein konfiguriertes Modell, um die Verbindbarkeit zu überprüfen.
    4. Bauen Sie einen Agent auf, der eine Systemanweisung sowie eine wachsende Nachrichtenhistorie speichert: Jeder Aufruf fügt den Benutzereingang hinzu, sendet die gesamte Historie, fügt die Modellantwort hinzu und gibt den Text zurück.
  • Schreiben Sie den Systemprompt, der Thought → Action → PAUSE → Observation vorschreibt.
  • Registrieren Sie Tools wie calculate() für Arithmetik und fish_weight() für eine kleine Abfristabelle in known_actions.
  • Instanziieren Sie den Agenten mit dem ReAct-Systemprompt.
  • Fragen Sie „Wie viel wiegt ein Hai?“ Erwarten Sie einen Vorschlag von Action: fish_weight: Shark statt einer reinen Zahl.
  • Führen Sie manuell fish_weight("Shark") aus und speichern Sie das Ergebnis (zunächst im Manuellmodus).
  • Geben Sie Observation: … zurück, damit der Agent antworten kann.
  • Prüfen Sie abot.messages, um den vollständigen Transkript zu sehen, den das Modell erhält.
  • Starten Sie einen neuen Agenten mit einer zusammengesetzten Frage (Gewichte von Hai und Quallenfisch). 13–15. Geben Sie manuell jede Beobachtung ein, einschließlich des gesamten Summenwerts bei Bedarf.
  • Lassen Sie den Agenten, sobald Beobachtungen vorliegen, die kombinierte Antwort erstellen.
  • Fügen Sie eine Regex hinzu, die automatisch Action: name: input erkennt.
  • Umhüllen Sie die Schleife mit query(): neuer Agent, Frage senden, Ausgabe ausgeben, Aktion parsen, gegen known_actions überprüfen, ausführen, beobachten, wiederholen bis zur endgültigen Antwort oder bis zum Schrittlimit.
  • Führen Sie query() auf der zusammengesetzten Frage aus und verfolgen Sie den Ablauf Thought → Action → Observation → Answer ohne manuelle Schritte.
  • Fazit

    Agenten beginnen mit einer Schleife, nicht mit einem Framework. Chain-of-Thought brachte Modellen bei, laut zu denken; ReAct strukturiert das Denken–Handeln–Beobachten nach der Arbeitsweise von Menschen. Populäre Agenten-Frameworks industrialisieren diese Idee. Wenn man die Schleife von Hand aufbaut, ändert sich dauerhaft das Gefühl bezüglich der Frameworks. Die ursprüngliche Veröffentlichung befindet sich unter https://arxiv.org/abs/2210.03629.

    Die wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeitumgebung darf nur aufgelistete Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.

    Die wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeitumgebung darf nur aufgelistete Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.

    Die wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeit muss nur genehmigte Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.

    Die wichtige Erkenntnis aus der Praxis ist, dass Frameworks den Loop hinter den Ausführungseinheiten und Tool-Node verbergen, doch der Vertrag bleibt unverändert: Das Modell muss eine parsierbare Aktion aussenden, die Laufzeit muss nur genehmigte Tools ausführen und Beobachtungen müssen als erstklassige Nachrichten erneut in den Transkript eingefügt werden. Wenn eines davon weggelassen wird, erhält man einen Chatbot mit Nebeneffekten – keinen Agenten.

    ← Alle ArtikelBrief senden