Stellen Sie einen LangGraph ReAct-Agenten für den IT-Support mit IBM Granite auf watsonx.ai bereit

Autoren

Anna Gutowska

AI Engineer, Developer Advocate

IBM

In diesem Tutorial erstellen Sie einen ReAct (Reasoning and Action) KI-Agenten mit dem Open-Source-Framework LangGraph, indem Sie ein IBM® Granite-Modell über die IBM® watsonx.ai-API in Python erstellen. Der Anwendungsfall besteht darin, bestehende IT-Support-Tickets zu verwalten und neue zu erstellen.

Was ist ein ReAct-Agent?

Ein KI-Agent ist ein System oder Programm, das in der Lage ist, autonom Aufgaben im Namen eines Benutzers oder eines anderen Systems auszuführen, indem es seinen Workflow gestaltet und verfügbare Tools benutzt. Generative KI-Agenten nutzen die fortschrittlichen Techniken der Verarbeitung natürlicher Sprache (NLP) von Large Language Models (LLMs), um Eingaben Schritt für Schritt zu verstehen und zu beantworten und zu bestimmen, wann externe Tools aufgerufen werden sollten. Eine Kernkomponente von KI-Agenten ist das Reasoning. Nach der Gewinnung neuer Informationen durch Tool-Aufruf, menschliches Eingreifen oder andere Agenten leitet das Reasoning-Paradigma die nächsten Schritte des Agenten.

Bei jeder Aktion und jeder Tool-Antwort weist das ReAct-Paradigma (Reasoning and Action) die Agenten an, zu „Denken“ und ihre nächsten Schritte zu planen. Dieses schrittweise, langsame Denken gibt uns Erkenntnisse darüber, wie der Agent den aktualisierten Kontext verwendet, um Schlussfolgerungen zu formulieren. Da dieser Reflexionsprozess kontinuierlich ist, wird er oft als Denken-Handeln-Beobachten-Schleife bezeichnet und ist eine Form des Chain of Thought Prompting.

Verwenden von LangGraph zum Erstellen von ReAct-Agenten

Dieses Tutorial verwendet das LangGraph-Framework, ein Open-Source-Framework für KI-Agenten, das für die Erstellung, Bereitstellung und Verwaltung komplexer generativer KI-Workflows entwickelt wurde. Das vorgefertigte Funktion create_react_agent von LangGraph ist eine einfache Möglichkeit, einen einfachen, benutzerdefinierten Agenten zu erstellen. Einfache ReAct-Agenten, wie der in diesem Tutorial, der in Abbildung 1 dargestellt ist, bestehen aus zwei Knoten. Ein Knoten ist für den Aufruf des Modells zuständig und der andere Knoten für die Verwendung von Tools. Zu den gängigen Tools gehören das vorgefertigte LangChain-Wikipedia-Tool, das DuckDuckGoSearchRun-Tool und sogar Retrieval-Augmented Generation (RAG). In Fällen mit komplexen Aktionseingaben kann ein weiterer Knoten hinzugefügt werden, wie in Abbildung 2 dargestellt. Dieser zusätzliche Knoten soll dazu beitragen, dass der Agent eine strukturierte Ausgabe zurückgibt.

Architekturdiagramm des ReAct-Agenten Architekturdiagramm des ReAct-Agenten

Innerhalb von LangGraph dient die Funktion „Zustand“ als Speicherbank, die alle wertvollen Informationen, die von jeder Iteration des KI-Systems verarbeitet werden, aufzeichnet und nachverfolgt. Diese zustandsbezogenen Diagramme ermöglichen es den Agenten, vergangene Informationen und wertvollen Kontext abzurufen. Die zyklische Struktur des ReAct-Diagramms wird genutzt, wenn das Ergebnis eines Schritts von den vorherigen Schritten in der Schleife abhängt. Die Knoten oder „Akteure“ im Graphen kodieren die Agentenlogik und sind durch Edges verbunden. Edges sind im Wesentlichen Python-Funktionen, die je nach aktuellem Status den nächsten Knoten bestimmen, der ausgeführt werden soll.

Voraussetzungen

Sie benötigen ein IBM Cloud-Konto®, um für das Erstellen eines  watsonx.ai™-Projekts.

Schritte

Um die watsonx-Programmierschnittstelle (API) nutzen zu können, müssen Sie die folgenden Schritte ausführen. Hinweis: Sie können dieses Tutorial auch auf GitHub aufrufen. 

Schritt 1. Generieren Sie Ihre Anmeldeinformationen für watsonx.ai

  1. Melden Sie sich bei watsonx.ai mit Ihrem IBM Cloud-Konto an.

  2. Erstellen Sie eine watsonx.ai Laufzeit Service-Instanz (wählen Sie Ihre entsprechende Region aus und wählen Sie den Lite-Plan, der eine kostenlose Instanz ist).

  3. Generieren Sie einen Schlüssel für eine Anwendungsprogrammierschnittstelle (API) .

Schritt 2. Richten Sie das Projekt in IDE ein

Um mit der Bereitstellung von Agenten auf watsonx.ai zu beginnen, klonen Sie dieses GitHub-Repository, und greifen Sie auf das ReAct-Agent-Projekt des IT-Supports zu. Sie können dazu den folgenden Befehl in Ihrem Terminal ausführen.

git clone git@github.com:IBM/ibmdotcom-tutorials.git
cd react-agent-langgraph-it-support/base/langgraph-react-agent/

Als Nächstes installieren Sie Poetry, falls Sie das noch nicht getan haben. Poetry ist ein Tool zur Verwaltung von Python-Abhängigkeiten und -Paketen.

pipx install --python 3.11 poetry

Aktivieren Sie dann Ihre virtuelle Umgebung.

source $(poetry -q env use 3.11 && poetry env info --path)/bin/activate

Anstatt den Befehl pip install zu verwenden, können Sie mit dem Poetry-Paket Abhängigkeiten hinzufügen, indem Sie den folgenden Befehl im Terminal ausführen. In diesem Schritt werden die Repository-Abhängigkeiten, die in der Datei pyproject.toml angezeigt werden, in Ihrer separaten virtuellen Umgebung installiert.

poetry install

Für die nächsten Schritte ist das Hinzufügen eines Arbeitsverzeichnisses zu PYTHONPATH erforderlich. Führen Sie in Ihrem Terminal Folgendes aus:  

export PYTHONPATH=$(pwd):${PYTHONPATH}

Um Ihre Umgebung einzurichten, folgen Sie den Anweisungen in der Datei README.mdauf Github. Für diese Einrichtung müssen mehrere Befehle in Ihrer IDE oder Befehlszeile ausgeführt werden.

Schritt 3. Festlegen der Umgebungsvariablen

In der Datei config.toml finden Sie die folgenden leeren Zugangsdaten, die vor dem Bereitstellen Ihres Agenten ausgefüllt werden müssen. Ihre watsonx_apikey und watsonx_url wurden in Schritt 1 dieses Tutorial initialisiert. Folgen Sie als Nächstes dem einfachen Formular auf der Entwicklerzugriffsseite, um Ihren Bereitstellungsbereich auszuwählen oder einen neuen zu erstellen. Dort können Sie Ihre space_id abrufen, die zum Verbinden unseres Agenten mit der watsonx.ai-Bereitstellung erforderlich ist. Zuletzt wird Ihre model_id auf das IBM Granite 3.2-Modell eingestellt.

[deployment]
  watsonx_apikey = ""
  watsonx_url = ""  # should follow the format: `https://{REGION}.ml.cloud.ibm.com`
  space_id = "" # found in the "Manage" tab of your Deployment or in the Developer Access page here: https://dataplatform.cloud.ibm.com/developer-access

[deployment.custom]
# during creation of deployment additional parameters can be provided inside `CUSTOM` object for further referencing
# please refer to the API docs: https://cloud.ibm.com/apidocs/machine-learning-cp#deployments-create
  model_id = "ibm/granite-3-2-8b-instruct"
  thread_id = "thread-1" # More info here: https://langchain-ai.github.io/langgraph/how-tos/persistence/

Schritt 4. Hochladen Ihrer Daten in IBM Cloud Object Storage

Unser Agent benötigt eine Datenquelle, um aktuelle Informationen bereitzustellen und neue Daten hinzuzufügen. Wir speichern unsere Datendatei in IBM Cloud Object Storage.

  1. Melden Sie sich zunächst bei IBM Cloud an. Erstellen Sie dann ein neues Projekt.
  2. Wählen Sie im Menü auf der linken Seite Ressourcenliste aus. Erstellen Sie über die Schaltfläche „Ressource erstellen“ eine neue Cloud Object Storage-Instanz oder verwenden Sie einfach diesen Link.
  3. Öffnen Sie Ihre neu erstellte IBM Cloud Storage-Instanz und erstellen Sie einen neuen Bucket. Im Rahmen dieses Tutorials können Sie das kostenlose Kontingent Smart Tier auswählen. Wenn Sie dazu aufgefordert werden, laden Sie Ihre Datei hoch. Nutzen Sie als Beispieldatei die Datei tickets.csv im GitHub-Repository, die in Schritt 2 verlinkt ist.

Schritt 5. Herstellen Ihrer Datenverbindung

Um dem ReAct-Agenten IT-Ticketmanagement-Funktionalität zur Verfügung zu stellen, müssen wir uns mit unserer Datenquelle in IBM Cloud Object Storage verbinden. Für diesen Schritt können wir die ibm_boto3 -Bibliothek verwenden.

In tools.py muss COS_ENDPOINT , COS_INSTANCE_CRN , BUCKET_NAME und CSV_FILE_NAME mit den entsprechenden Informationen unter Verwendung der Bucket-Details ausgefüllt werden, die Sie in Ihrer Cloud Object Storage-Instanz auf der Registerkarte „Konfiguration“ finden. 

  COS_ENDPOINT = ""       #find in your COS bucket configuration
  COS_INSTANCE_CRN = ""   #find in your COS bucket configuration
  BUCKET_NAME = ""        #find in your COS bucket configuration
  CSV_FILE_NAME = "filename.csv" #you can use the provided tickets.csv sample file 

  cos = ibm_boto3.client(
      "s3",
      ibm_api_key_id=dep_config["watsonx_apikey"],
      ibm_service_instance_id=COS_INSTANCE_CRN,
      config=Config(signature_version="oauth"),
      endpoint_url=COS_ENDPOINT,
  )

Schritt 6. Erstellen Ihrer benutzerdefinierten Tools

Unser Agent kann Daten in unserer Datei sowohl lesen als auch schreiben. Erstellen wir zunächst das Tool zum Lesen von Daten mithilfe des LangChain@tool Decorators. 

Wir haben das Toolfind_tickets der Dateitools.py hinzugefügt. Dieses Tool ruft das Datenobjekt aus Cloud Object Storage ab und gibt es als Pandas-Datenrahmen zurück. Andernfalls wird eine Ausnahme ausgelöst. 

  @tool 
  def find_tickets():
      """Returns a list of of all tickets."""
      try:
          response = cos.get_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME)
          csv_data = pd.read_csv(response['Body']) 
          print("Ticket file loaded successfully:")
          return csv_data
      except Exception as e:
          print(f"Error loading file from COS: {e}")
          return None

 

Als Nächstes haben wir das Tool create_ticket hinzugefügt. 

  @tool 
def create_ticket(issue: str, urgency:str):
    """Creates a tickets for a customer issue. Request a detailed explanation of the customer issue and urgency level before creating a ticket.
    
    Args:
        issue (str): A description of the issue.
        urgency (str): A category value for the level of urgency. Can be "low", "medium", or "high".
    
    Returns:
        The new ticket.
    """
    try:
        # retrieve the existing item to reload the contents
        response = cos.get_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME)
        existing_body_df = pd.read_csv(response['Body'])
        new_ticket = {"issue": issue, "date_added":datetime.now().strftime("%m-%d-%Y"), "urgency":urgency, "status":"open"}
        # Add a new row (i.e. ticket) using loc[]
        existing_body_df.loc[len(existing_body_df)] = new_ticket

        cos.put_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME, Body=existing_body_df.to_json())
        return "New ticket successfully created!"
    except Exception as e:
        print("Unable to create new ticket. Please try again.")

Dieses Tool nimmt die Beschreibung des Problems durch den Benutzer und die Dringlichkeit des Problems als Argumente auf. Mit diesen Informationen wird unserer Datei in COS eine neue Zeile hinzugefügt und somit ein neues Ticket erstellt. Andernfalls wird eine Ausnahme ausgelöst. 

Das letzte Tool, das wir unserer tools.py Datei hinzufügen müssen, ist das Tool get_todays_date , das das Modul datetime verwendet, um das heutige Datum im Format MM-DD-JJJJ zurückzugeben. Dieses Tool ist nützlich, um auf das aktuelle Datum zuzugreifen, das der Agent nicht anders abrufen kann, da das LLM nicht mit diesen Daten trainiert wurde. 

  @tool
  def get_todays_date():
    """Returns today's date in MM-DD-YYYY format."""
    date = datetime.now().strftime("%m-%d-%Y")
    return date 

Um unserem Agenten Zugriff auf diese Tools zu gewähren, haben wir sie der TOOLS -Liste in der init.py-Datei des Erweiterungsmoduls hinzugefügt . Diese Liste sollte der Inhalt Ihrer hinzugefügt Datei im src/langgraph_react_agent -Verzeichnis sein.

  from .tools import (
    find_tickets,
    get_todays_date,
    create_ticket
  )

  TOOLS = [
      find_tickets,
      get_todays_date,
      create_ticket
  ]


Diese Tools werden in die Datei agent.py importiert und an die vorgefertigte LangGraph create_react_agent -Funktion weitergegeben, die als Agent Executor dient. Zu den weiteren Parametern gehören das Large Langauage Model, das mithilfe der ChatWatsonx -Klasse initialisiert wird, wodurch Toolaufrufe auf watsonx.ai, der Speichersparmodus und Systemprompt ermöglicht werden. Beachten Sie, dass sich einige Prompts besser verhalten als andere und daher je nach gewähltem LLM ein gewisses Maß an Prompt Engineering erforderlich sein kann. 

Denken Sie vor der Bereitstellung Ihres Agenten daran, alle erforderlichen Informationen in der config.toml Datei anzugeben. 

Schritt 7. Chatten mit Ihrem Agenten

Es gibt drei Möglichkeiten, mit Ihrem Agenten zu chatten.

Möglichkeit 1. Lokale Abfrage des Agenten


Führen Sie das Skript für die lokale KI-Dienstausführung aus.

  poetry run python examples/execute_ai_service_locally.py


Möglichkeit 2. Bereitstellen des Agenten über die integrierte Chat-Oberfläche in watsonx.ai


Die letzte Möglichkeit besteht darin, im Bereich „Bereitstellungen“ auf watsonx.ai auf den Agenten zuzugreifen. Wählen Sie dazu im Menü auf der linken Seite „Bereitstellungen“. Wählen Sie dann Ihren Bereitstellungsraum, wählen Sie die Registerkarte „Assets“, wählen Sie Ihronline ai_service -Asset, wählen Sie das Asset mit dem Tag „wx-agent“ noch einmal aus und öffnen Sie schließlich die Registerkarte „Vorschau“. Jetzt können Sie in der interaktiven Chat-Oberfläche mit dem Agenten chatten. Jede dieser drei Optionen sollte zu einer ähnlichen Ausgabe führen.

Möglichkeit 3. Agenten in IDE bereitstellen und mit ihm chatten

Um das Bereitstellungsskript auszuführen, initialisieren Sie die Variable deployment_id in der Datei query_existing_deployment.py .

Die deployment_id Ihrer Bereitstellung erhalten Sie durch die Ausführung der Datei scripts/deploy.py .

Führen Sie als Nächstes das Bereitstellungsskript aus. 

  poetry run python scripts/deploy.py

Führen Sie dann das Skript für die Abfrage der Bereitstellung aus.

  poetry run python examples/query_existing_deployment.py


Für die Zwecke dieses Tutorials wählen wir Möglichkeit 2 und fragen unseren bereitgestellten Agenten auf watsonx.ai in Form eines Chatbots ab. Bieten wir dem Agenten einige Prompts an, die den Einsatz von Tools erfordern. Nachdem Sie die in Möglichkeit 3 aufgeführten Schritte ausgeführt haben, sollten Sie eine Chat-Oberfläche auf watsonx.ai sehen. Dort können wir unseren Prompt eingeben. 

Lassen Sie uns zunächst testen, ob das create_ticket Tool erfolgreich aufgerufen wird. Fordern Sie den Agenten auf, ein neues Ticket zu erstellen.

Abfrage des bereitgestellten Agenten auf watsonx.ai, um ein neues Ticket zu erstellen Abfrage des bereitgestellten Agenten auf watsonx.ai, um ein neues Ticket zu erstellen

Wie Sie in der abschließenden Antwort des Agenten sehen können, hat das KI-System erfolgreich Problemlösung eingesetzt, um mit dem create_ticket Tool ein neues Ticket zu erstellen. Einblick in Toolaufrufe ist bei der Fehlersuche hilfreich. Sehen wir uns nun an, ob das Ticket erfolgreich zu unserer Datendatei hinzugefügt wurde, die als Wissensbasis des Agenten dient. 

Abfrage des bereitgestellten Agenten auf watsonx.ai, um die aktuellen Tickets abzurufen Abfrage des bereitgestellten Agenten auf watsonx.ai, um die aktuellen Tickets abzurufen

Großartig! Der Agent hat das Ticket erfolgreich zur Datei hinzugefügt.

Zusammenfassung

In diesem Tutorial haben Sie einen Agenten mit dem Framework ReAct erstellt, der Entscheidungsfindung nutzt, um komplexe Aufgaben wie das Abrufen und Erstellen von Support-Tickets zu lösen. Es gibt mehrere KI-Modelle, die das Aufrufen von Agenten ermöglichen, wie z. B. Gemini von Google, Granite von IBM und GPT-4 von OpenAI. In unserem Projekt haben wir ein IBM Granite KI-Modell über die watsonx.ai API verwendet. Das Modell verhielt sich sowohl lokal als auch bei der Bereitstellung auf watsonx.ai wie erwartet. Sehen Sie sich als nächsten Schritt die Multi-Agent-Vorlagen LlamaIndex und CrewAI an, die im GitHub-Repository watsonx-developer-hub verfügbar sind, um KI-Agenten zu erstellen.

Weiterführende Lösungen
Entwicklung von IBM KI-Agenten 

Ermöglichen Sie Entwicklern die Erstellung, Bereitstellung und Überwachung von KI-Agenten mit dem IBM watsonx.ai Studio.

watsonx.ai erkunden
IBM KI-Agenten und -Assistenten

Erzielen Sie bahnbrechende Produktivität mit einem der branchenweit umfassendsten Funktionenpakete, das Unternehmen bei der Erstellung, Anpassung und Verwaltung von KI-Agenten und KI-Assistenten unterstützt. 

Erkunden Sie KI-Agenten
IBM Granite

Erzielen Sie Kosteneinsparungen von über 90 % mit den kleineren und offenen Modellen von Granite, die auf Entwicklereffizienz ausgelegt sind. Diese auf Unternehmen abgestimmten Modelle bieten eine herausragende Leistung bei Sicherheitsbenchmarks und in einem breiten Spektrum von Unternehmensaufgaben von Cybersicherheit bis RAG.

Granite erkunden
Machen Sie den nächsten Schritt

Automatisieren Sie Ihre komplexen Workflows und erzielen Sie bahnbrechende Produktivität mit einem der branchenweit umfassendsten Funktionspakete, das Unternehmen bei der Erstellung, Anpassung und Verwaltung von KI-Agenten und KI-Assistenten unterstützt. 

watsonx.ai Agentenentwicklung erkunden Entdecken Sie watsonx Orchestrate