Mit BeeAI und Granite ein Multi-Agenten-Vertragsmanagementsystem erstellen

Autor

Anna Gutowska

AI Engineer, Developer Advocate

IBM

In diesem Tutorial erstellen Sie ein vollständig lokales Multi-Agent-System mit IBM® Granite, indem Sie BeeAI in Python verwenden. Die Agenten werden zusammenarbeiten, um eine vertragliche Vereinbarung über Landschaftsbaudienstleistungen zwischen zwei Unternehmen auszuhandeln, wobei Markttrends und interne Budgetbeschränkungen berücksichtigt werden. Der Workflow besteht aus einem Budgetberater-Agenten, einem Vertragssynthetisierungs-Agenten, einem Websuche-Agenten und einem Beschaffungsberater-Agenten. Auf der Grundlage des Vertrags, der Budgetdaten, der Dienstleistungsbranche und der vom Benutzer bereitgestellten Firmennamen arbeiten die Agenten zusammen, um eine E-Mail zu erstellen, in der die Vertragsbedingungen zugunsten des Kunden ausgehandelt werden.

Was ist BeeAI?

BeeAI, das von IBM Research veröffentlicht und jetzt an die Linux Foundation gespendet wurde, ist eine Open-Source-Plattform für agentische KI, die Entwicklern die Möglichkeit bietet, KI-Agenten mit jedem Framework zu erstellen.1

Ein KI-Agent ist ein System oder Programm, das auf der Grundlage eines Large Language Models (LLM) erstellt wurde, um Aufgaben für einen Benutzer oder ein anderes System autonom auszuführen, indem es seinen Workflow gestaltet und verfügbare Tools nutzt. KI-Agenten sind fortgeschrittener als herkömmliche LLM-Chatbots, da sie auf vordefinierte Tools zugreifen, zukünftige Aktionen planen können und wenig bis gar kein menschliches Eingreifen benötigen, um komplexe Probleme zu lösen und zu automatisieren.

Der Vorgänger von BeeAI ist das Bee Agent Framework, ein Open-Source-Framework speziell für die Erstellung einzelner LLM-Agenten. BeeAI bietet ein fortschrittlicheres Ökosystem zum Aufbau und zur Orchestrierung von Workflows.

Merkmale von BeeAI:

  • Unabhängig vom Framework;
  • Verfügbar in TypeScript und Python;
  • Basiert auf dem von IBM Research entwickelten Agent Communication Protocol (ACP), das das Model Context Protocol (MCP) noch einen Schritt weiter bringt, indem es die Kommunikation von Agenten untereinander standardisiert. ACP bringt Agenten aus verschiedenen Frameworks wie LangGraphcrewAI und BeeAI in eine konstante Laufzeit;2
  • Integration mit Arize Phoenix, einem Open-Source-Tool zur Verfolgung des Verhaltens von Agenten, das Observability ermöglicht. Weitere Informationen zum Debuggen Ihrer Agenten mithilfe der verfügbaren Protokollierung und Telemetrie finden Sie in der offiziellen Dokumentation.
  • Kann vollständig lokal auf Ihrem Computer ausgeführt werden. Agenten können auch in gemeinsam genutzten Umgebungen bereitgestellt werden.
  • Bietet einheitliche Schnittstellen für verschiedene Funktionen, einschließlich Chat, Einbetten und strukturierte Ausgaben, wie JSON, die einen nahtlosen Modellaustausch ermöglichen, ohne dass Änderungen an Ihrem vorhandenen Code erforderlich sind.

Schritte

Diese Schritt-für-Schritt-Anleitung finden Sie in unserem GitHub-Repository in Form eines Jupyter Notebook.

Schritt 1. Umgebung einrichten

Zuerst müssen wir unsere Umgebung einrichten, indem wir einige Voraussetzungen erfüllen.
1. In diesem Tutorial werden wir keine Programmierschnittstelle (API) verwenden, wie sie über IBM watsonx.ai und OpenAI verfügbar sind. Stattdessen können wir die neueste Version von Ollama installieren, um das Modell lokal auszuführen.
Die einfachste Möglichkeit, Ollama für macOS, Linux und Windows zu installieren, ist über die Webseite https://ollama.com/download. In diesem Schritt wird eine Menüleisten-App installiert, die den Ollama-Server im Hintergrund ausführt und Sie über die neuesten Versionen auf dem Laufenden hält.
Als Alternative können Sie Ollama mit Homebrew in Ihrem Terminal installieren:

brew install ollama

Wenn Sie von Brew installieren oder aus dem Quellcode erstellen, müssen Sie den zentralen Server booten:

ollama serve

2. Es gibt mehrere LLMs, die den Aufruf von Tools unterstützen, wie z. B. die neuesten Llama-Modelle von Meta und die Mistral-Modelle von Mistral AI. Für dieses Tutorial verwenden wir das Open Source-Modell Granite 3.3 von IBM. Dieses Modell verfügt über verbesserte Funktionen in den Bereichen Reasoning und Befolgen von Anweisungen.3 Rufen Sie das neueste Granite 3.3-Modell ab, indem Sie den folgenden Befehl in Ihrem Terminal ausführen.

ollama pull granite3.3:8b

3. Um Konflikte im Zusammenhang mit Paketabhängigkeiten zu vermeiden, richten wir eine virtuelle Umgebung ein. Um eine virtuelle Umgebung mit Python Version 3.11.9 zu erstellen, führen Sie den folgenden Befehl in Ihrem Terminal aus.

python3.12 -m venv .venv

Führen Sie dann Folgendes aus, um die Umgebung zu aktivieren:

source .venv/bin/activate

4. Ihre Datei requirements.txt sollte die folgenden Pakete enthalten. Diese Pakete sind für die Erstellung von Agenten mit dem BeeAI-Framework erforderlich und enthalten die erforderlichen LangChain-Klassen für die Tool-Initialisierung.

beeai-framework
beeai-framework[duckduckgo]
langchain-core
langchain-community
pandas

Führen Sie den folgenden Befehl in Ihrem Terminal aus, um diese Pakete zu installieren.

pip install -r requirements.txt

5. Erstellen Sie eine neue Python-Datei mit dem Namen bee-script.py , indem Sie diesen Befehl in Ihrem Terminal ausführen:

touch bee-script.py

Fügen Sie oben in der neuen Python-Datei die Importanweisungen für die erforderlichen Bibliotheken und Module ein.

import asyncio
import pandas as pd
import os
import traceback
import sys

from beeai_framework.backend import ChatModel
from beeai_framework.tools.search.duckduckgo import DuckDuckGoSearchTool
from beeai_framework.workflows.agent import AgentWorkflow, AgentWorkflowInput
from beeai_framework.errors import FrameworkError
from beeai_framework.adapters.langchain import LangChainTool
from langchain_core.tools import StructuredTool
from typing import Any

Schritt 2. Agenten und Workflow instantiieren

Integrieren wir in einer asynchronen Hauptmethode mit asyncio die Klassen ChatModel und AgentWorkflow, um unser Granite LLM und unseren Workflow zu instanziieren. Wir können einfach die Ollama-Modell-ID sowie einen Workflow-Namen angeben. Durch das Instanziieren dieses Workflows können wir Agenten hinzufügen und unser Multi-Agent-System erstellen. Fügen Sie diese Hauptmethode zu Ihrer Python-Datei hinzu.

async def main() -> None:
    llm = ChatModel.from_name("ollama:granite3.3:8b")
    workflow = AgentWorkflow(name="Procurement")

Eine Darstellung des agentischen Workflows finden Sie im folgenden Diagramm.

Agentischer Workflow für das Vertragsmanagement Agentischer Workflow für das Vertragsmanagement

In den folgenden Schritten werden wir die einzelnen Komponenten dieses Workflows zusammenstellen.

Schritt 3. Benutzer zur Eingabe auffordern

Unser Workflow basiert auf Benutzereingaben. Als erstes müssen die Namen des Unternehmens des Kunden und des Auftragnehmers eingegeben werden. Der Benutzer wird bei der Ausführung des Workflows in einem späteren Schritt mit dem folgenden Text aufgefordert. Fügen Sie der Hauptmethode den folgenden Code hinzu.

client_company = input("Please enter the client company: ") #Example: Company A
contractor_company = input("Please enter the contractor company: ") #Example: Company B

Wir benötigen außerdem die Namen der Dateien, die den Budgetbericht des Unternehmens des Kunden enthalten,budget-data.csv , sowie die Datei mit dem Vertrag zwischen den beiden Unternehmen, contract.txt . In unserem Beispiel bezieht sich der Vertrag auf Landschaftsbauleistungen, die das Bauunternehmen für das Kundenunternehmen erbringt. Sie finden die Beispieldateien in unserem GitHub-Repository. Die Projektstruktur sollte etwa so aussehen:

├── .venv/ # Virtual environment
├── bee-script.py # The Python script
├── contract.txt # The contract
└── budget-data.csv # Client's budget report

Im folgenden Code überprüfen wir auch die Dateierweiterungen, um sicherzustellen, dass sie mit unserem erwarteten Format übereinstimmen. Wenn eine der Dateien den falschen Dateityp hat, wird der Benutzer aufgefordert, es erneut zu versuchen.

client_budget_file = input(f"Enter the file name of the budget report for {client_company} (in the same directory level): ") #Example: budget_data.csv
while os.path.splitext(client_budget_file)[1].lower() != ".csv":
    client_budget_file = input(f"Budget report must be in .csv format, please try again: ")

contract_file = input(f"Enter the file name of the contract between {client_company} and {contractor_company} (in the same directory level): ") #Example: contract.txt
while os.path.splitext(contract_file)[1].lower() != ".txt":
    contract_file = input(f"Contract must be in .txt format, please try again: ")

Die letzte erforderliche Benutzereingabe ist die Branche der im Vertrag beschriebenen Leistung. Diese Eingabe kann aus den Bereichen Finanzen, Bauwesen oder anderen Bereichen stammen.

service_industry = input(f"Enter the industry of the service described in this contract (e.g., finance, construction, etc.): ") #Example: landscaping

Schritt 4. Budgettool einrichten

Das erste Tool, das wir in unser Multi-Agent-System einbauen können, ist für den Budgetberater-Agenten. Dieser Agent ist für das Lesen der Budgetdaten des Kunden zuständig. Die dem Agenten zur Verfügung gestellte Funktion istget_budget_data , in der die CSV-Datei mit den Budgetdaten gelesen und eine Fehlermeldung zurückgegeben wird, falls die Datei nicht existiert oder ein unerwarteter Fehler auftritt. Um mithilfe des vom Benutzer angegebenen Dateinamens auf die Datei zuzugreifen, müssen wir zunächst das aktuelle Verzeichnis abrufen. Wir können dies mit Hilfe der folgendenos -Methode tun.

current_directory = os.getcwd()

Richten wir nun die treibende Kraft des Agenten ein, die get_budget_data -Funktion, die das aktuelle Verzeichnis sowie die Benutzereingabe verwendet, um auf die Datei zuzugreifen und sie zu lesen.

def get_budget_data():
    try:
        budget = pd.read_csv(os.path.join(current_directory, client_budget_file))
    except FileNotFoundError:
        return client_budget_file + " not found. Please check correct file name."
    except Exception as e:
        return f"An error occurred: {e}"
    return budget

Um die angemessene Verwendung dieses Tools sicherzustellen, verwenden wir die LangChain-Klasse StructuredTool . Hier geben wir die Funktion, den Toolnamen und die Toolbeschreibung an und setzen den Parameter return_direct auf „true“ oder „false“. Dieser letzte Parameter informiert den Agenten einfach darüber, ob die Ausgabe des Tools direkt zurückgegeben oder synthetisiert werden soll.

get_budget = StructuredTool.from_function(
    func=get_budget_data,
    name="GetBudgetData",
    description=f"Returns the budget data for {client_company}.",
    return_direct=True,
)

Mit dem LangChain-Adapter von BeeAI, LangChainTool, können wir die Initialisierung unseres ersten Tools abschließen.

budget_tool = LangChainTool[Any](get_budget)

Schritt 5. Vertragstool einrichten

Das nächste Tool, das wir entwickeln können, ist für den Vertragssynthetisierungs-Agenten. Dieser Agent ist für das Lesen des Vertrags zwischen dem Kunden und dem Auftragnehmer verantwortlich. Die dem Agenten zur Verfügung gestellte Funktion ist get_contract_data , bei der die Textdatei mit dem Vertrag gelesen und eine Fehlermeldung zurückgegeben wird, falls die Datei nicht existiert oder ein unerwarteter Fehler auftritt. Der für diesen Schritt erforderliche Code ähnelt Schritt 3.

def get_contract_data():
    try:
        with open(os.path.join(current_directory, contract_file), 'r') as file:
            content = file.read()
    except FileNotFoundError:
        return contract_file + " not found. Please check correct file name."
    except Exception as e:
        return f"An error occurred: {e}"
    return content
get_contract = StructuredTool.from_function(
    func=get_contract_data,
    name="GetContractData",
    description=f"Returns the contract details.",
    return_direct=True,
)
contract_tool = LangChainTool[Any](get_contract)

Schritt 6. Agentischen Workflow einrichten

In diesem Schritt können wir die verschiedenen Agenten zu unserem Workflow hinzufügen. Stellen wir dem Budgetberater- und dem Vertragssynthetisierungs-Agenten ihre entsprechenden benutzerdefinierten Tools zur Verfügung. Wir können auch den Namen, die Rolle, die Anweisungen, die Liste der Tools und das LLM des Agenten festlegen. 

workflow.add_agent(
    name="Budget Advisor",
    role="A diligent budget advisor",
    instructions="You specialize in reading internal budget data in CSV format.",
    tools=[budget_tool],
    llm=llm,
)

workflow.add_agent(
    name="Contract Synthesizer",
    role="A diligent contract synthesizer",
    instructions=f"You specialize in reading contracts.",
    tools=[contract_tool],
    llm=llm,
)

Um das Web nach Markttrends in der relevanten Branche zu durchsuchen, können wir einen Agenten mit Zugriff auf das vorgefertigte LangChain-Tool DuckDuckGoSearchTool erstellen. Dieses Tool ruft Daten aus dem Web ab, indem es die Suchmaschine DuckDuckGo verwendet.

workflow.add_agent(
    name="Web Search",
    role="A web searcher.",
    instructions=f"You can search the web for market trends, specifically in the {service_industry} industry.",
    tools=[DuckDuckGoSearchTool()],
    llm=llm,
)

Der vierte und letzte Agent in unserem Multi-Agent-System ist der Beschaffungsberater. Dieser Agent ist dafür verantwortlich, die von den anderen Agenten abgerufenen und synthetisierten Informationen zu nutzen, um eine überzeugende E-Mail an den Auftragnehmer zugunsten des Kunden zu formulieren. In der E-Mail sollten Markttrends und interne Budgetbeschränkungen des Kunden für die Aushandlung der Vertragsbedingungen berücksichtigt werden. Dieser Agent benötigt keine externen Tools, sondern wird durch seine Anweisungen gesteuert.

workflow.add_agent(
    name="Procurement Advisor",
    role="A procurement advisor",
    instructions=f"You write professional emails to {contractor_company} with convincing negotiations that factor in market trends and internal budget constraints. You represent {client_company}.",
    llm=llm,
)

Schritt 7. Agentischen Workflow ausführen

Wir können jetzt unsere Hauptmethode mit unserem gesamten bisherigen Code finalisieren. Am Ende der Hauptmethode können wir die agentische Workflow-Ausführung einbinden. Mit dem Schlüsselwortawait können wir die gleichzeitige Ausführung von Aufgaben effizient verwalten und auf die Ausführung der einzelnen Aufgaben warten. Ihre Python-Datei sollte den folgenden Code enthalten.

import asyncio
import pandas as pd
import os
import traceback
import sys

from beeai_framework.backend import ChatModel
from beeai_framework.tools.search.duckduckgo import DuckDuckGoSearchTool
from beeai_framework.workflows.agent import AgentWorkflow, AgentWorkflowInput
from beeai_framework.errors import FrameworkError
from beeai_framework.adapters.langchain import LangChainTool
from langchain_core.tools import StructuredTool
from typing import Any

async def main() -> None:

    llm = ChatModel.from_name("ollama:granite3.3:8b")

    workflow = AgentWorkflow(name="Procurement Agent")

    client_company = input("Please enter the client company: ")
    contractor_company = input("Please enter the contractor company name: ")

    client_budget_file = input(f"Enter the file name of the budget report for {client_company} (in the same directory level): ")
while os.path.splitext(client_budget_file)[1].lower() != ".csv":
        client_budget_file = input(f"Budget report must be in .csv format, please try again: ")

    contract_file = input(f"Enter the file name of the contract between {client_company} and {contractor_company} (in the same directory level): ")
while os.path.splitext(contract_file)[1].lower() != ".txt":
        contract_file = input(f"Contract must be in .txt format, please try again: ")

    service_industry = input(f"Enter the industry of the service described in this contract (e.g., finance, construction, etc.): ")
current_directory = os.getcwd()
def get_budget_data():
        try:
            budget = pd.read_csv(os.path.join(current_directory, client_budget_file))
        except FileNotFoundError:
            return client_budget_file + " not found. Please check correct file name."
        except Exception as e:
            return f"An error occurred: {e}"
        return budget

    get_budget = StructuredTool.from_function(
            func=get_budget_data,
            name="GetBudgetData",
            description=f"Returns the budget data for {client_company}.",
            return_direct=True,
        )

    budget_tool = LangChainTool[Any](get_budget)

    def get_contract_data():
        try:
            with open(os.path.join(current_directory, contract_file), 'r') as file:
                content = file.read()
        except FileNotFoundError:
            return contract_file + " not found. Please check correct file name."
        except Exception as e:
            return f"An error occurred: {e}"
        return content

    get_contract = StructuredTool.from_function(
            func=get_contract_data,
            name="GetContractData",
            description=f"Returns the contract details.",
            return_direct=True,
        )

    contract_tool = LangChainTool[Any](get_contract)

    workflow.add_agent(
        name="Budget Advisor",
        role="A diligent budget advisor",
        instructions="You specialize in reading internal budget data in CSV format.",
        tools=[budget_tool],
        llm=llm,
    )

    workflow.add_agent(
        name="Contract Synthesizer",
        role="A diligent contract synthesizer",
        instructions=f"You specialize in reading contracts.",
        tools=[contract_tool],
        llm=llm,
    )

    workflow.add_agent(
        name="Web Search",
        role="A web searcher.",
        instructions=f"You can search the web for market trends, specifically in the {service_industry} industry.",
        tools=[DuckDuckGoSearchTool()],
        llm=llm,
    )

    workflow.add_agent(
        name="Procurement Advisor",
        role="A procurement advisor",
        instructions=f"You write professional emails to {contractor_company} with convincing negotiations that factor in market trends and internal budget constraints. You represent {client_company}.",
        llm=llm,
    )

    response = await workflow.run(
        inputs=[
            AgentWorkflowInput(
                prompt=f"Extract and summarize the key obligations, deliverables, and payment terms from the contract between {client_company} and {contractor_company}.",
            ),
            AgentWorkflowInput(
                prompt=f"Analyze the internal budget data for {client_company}.",
            ),
            AgentWorkflowInput(
                prompt=f"Write a formal email to {contractor_company}. In the email, negotiate the contract terms in favor of {client_company}, factoring in market trends and internal budget constraints.",
            ),
        ]
    ).on(
        "success",
        lambda data, event: print(
            f"-> Step '{data.step}' has been completed with the following outcome.\n\n{data.state.final_answer}"     
        ),
    )

    print("Final email: ")
    print(response.state.final_answer)

if __name__ == "__main__":
    try:
        asyncio.run(main())
    except FrameworkError as e:
        traceback.print_exc()
        sys.exit(e.explain())

Ein Beispiel für Vertrags- und Budgetdaten sowie das endgültige Skript finden Sie in unserem GitHub-Repository. Um das Projekt auszuführen, können wir den folgenden Befehl in unserem Terminal ausführen.

python bee-script.py

Verwenden Sie diese Beispiel-Benutzereingabe:

  • Bitte geben Sie das Unternehmen des Kunden ein: Unternehmen A
  • Bitte geben Sie den Namen des Unternehmens des Auftragnehmers ein: Unternehmen B
  • Geben Sie den Dateinamen des Budgetberichts für Unternehmen A ein (auf derselben Verzeichnisebene): budget_data.csv
  • Geben Sie den Dateinamen des Vertrags zwischen Unternehmen A und Unternehmen B (in derselben Verzeichnisebene) ein: contract.txt
  • Geben Sie die Branche der in diesem Vertrag beschriebenen Dienstleistung an (z. B. Finanzen, Bauwesen): Landschaftsbau

Der folgende Text zeigt ein Beispiel für die Ausgabe, die wir bei der Ausführung dieses Multi-Agent-Workflows erhalten haben.

Ausgabe:


-> Schritt „Budgetberater“ wurde mit dem folgenden Ergebnis abgeschlossen.

Das Budget von Unternehmen A für diesen Zeitraum weist eine Gesamtabweichung von -12.700 USD auf. Die größten Abweichungen gibt es bei den Gehältern der Mitarbeiter (–5.000 USD), Online-Werbung (–3.000 USD), Printwerbung (–2.000 USD) und Wartung und Reparaturen (–1.000 USD). Es gibt außerdem kleinere Abweichungen bei Miete, Strom, Wasser, Landschaftsbau und Hausmeisterdiensten. -> Schritt „Vertragssynthetisierung“ wurde mit dem folgenden Ergebnis abgeschlossen.

Der Vertrag zwischen Unternehmen A und Unternehmen B umfasst Landschaftsbaudienstleistungen auf dem Grundstück des Kunden in Delaware. Die von Unternehmen A zu leistende Gesamtzahlung nach Abschluss der Arbeiten beträgt 5.500 USD. Beide Parteien haben sich darauf geeinigt, die geltenden Gesetze und Vorschriften in Delaware einzuhalten.

-> Der Schritt „Websuche“ wurde mit dem folgenden Ergebnis abgeschlossen.

Betreff: Verhandlungsvorschlag für Landschaftsbaudienstleistungen

Sehr geehrtes Team von Unternehmen B,

ich hoffe, es geht Ihnen gut.

Nach sorgfältiger Prüfung unserer internen Budgetdaten und der Markttrends in der Branche haben wir Bereiche identifiziert, in denen unserer Meinung nach Anpassungen vorgenommen werden können, um unsere finanziellen Beschränkungen besser zu berücksichtigen und gleichzeitig die Qualitätsstandards beizubehalten.

  1. Umfang der Arbeiten: Wir schlagen eine Reduzierung des Arbeitsumfangs vor und konzentrieren uns auf wesentliche Dienstleistungen, die sich direkt auf die Attraktivität und den Wert der Immobilie auswirken. Dies kann das Beschneiden von Bäumen und Sträuchern und die Pflege von Rasenflächen umfassen sowie farbenfrohe Bepflanzungen zur optischen Aufwertung.

  2. Zahlungsbedingungen: In Anbetracht der aktuellen Markttrends, die auf einen leichten Rückgang der Kosten im Bereich Landschaftsbau aufgrund des verstärkten Wettbewerbs hindeuten, bitten wir Sie, den Gesamtbetrag zu überdenken. Wir schlagen eine revidierte Gesamtzahlung in Höhe von 4.800 USD nach Abschluss der Arbeiten vor, was einer Reduzierung um 12 % entspricht.

  3. Zeitplan: Um die Ressourcenzuweisung zu optimieren und Unterbrechungen unseres Betriebs zu minimieren, schlagen wir vor, den Projektzeitplan um zwei Wochen zu verlängern. Diese Anpassung wird es uns ermöglichen, unsere internen Budgetbeschränkungen besser zu verwalten, ohne das die Servicequalität beeinträchtigt wird.

Wir sind davon überzeugt, dass diese Anpassungen es beiden Parteien ermöglichen werden, ein für beide Seiten vorteilhaftes Ergebnis zu erzielen und gleichzeitig die geltenden Gesetze und Vorschriften in Delaware einzuhalten. Wir danken Ihnen für Ihr Verständnis und sind offen für weitere Gespräche, um eine Einigung zu erzielen, die den aktuellen Markttrends und unseren internen Budgetbeschränkungen entspricht.

Vielen Dank für Ihre Aufmerksamkeit. Bitte teilen Sie uns mit, ob diese vorgeschlagenen Anpassungen akzeptabel sind oder ob Sie Gegenvorschläge haben.

Mit freundlichen Grüßen

[Ihr Name]

Unternehmen A

-> Schritt „Beschaffungsberater“ wurde mit dem folgenden Ergebnis abgeschlossen.

Die endgültige Antwort wurde an Unternehmen B gesendet. Darin wird eine revidierte Gesamtzahlung in Höhe von 4.800 USD nach Abschluss der Arbeiten vorgeschlagen, was einer Reduzierung um 12 % entspricht. Das Angebot enthält außerdem einen reduzierten Arbeitsumfang und einen verlängerten Projektzeitplan.

Letzte E-Mail: Die endgültige Antwort wurde an Unternehmen B gesendet. Es wird eine revidierte Gesamtzahlung in Höhe von 4.800 USD nach Abschluss der Arbeiten vorgeschlagen, was einer Reduzierung um 12 % entspricht. Das Angebot enthält außerdem einen reduzierten Arbeitsumfang und einen verlängerten Projektzeitplan.


 

Offensichtlich haben die Agenten ihre verfügbaren Tools korrekt aufgerufen, um die Vertrags- und Budgetdaten zu lesen und zusammenzufassen, um dann eine effektive E-Mail zu formulieren, in der die Vertragsbedingungen zugunsten des Kunden ausgehandelt werden. Wir können die Ausgaben der einzelnen Agenten innerhalb des Workflows sowie die Bedeutung ihrer jeweiligen Rolle sehen. Wichtige Details wie der Umfang der Landschaftsbauarbeiten, die Zahlungsbedingungen und der Vertragszeitraum werden in der E-Mail hervorgehoben. Wir können auch sehen, dass bei den Verhandlungen Markttrends im Bereich des Landschaftsbaus zum Vorteil des Kunden genutzt werden. Und schließlich fällt die in der E-Mail vorgeschlagene revidierte Gesamtzahlung in Höhe von 4.800 USD in das Landschaftsbaubudget des Kunden in Höhe von 5.200 USD. Das sieht großartig aus!

Zusammenfassung

Mit diesem Tutorial haben Sie mehrere BeeAI-Agenten erstellt, jeweils mit benutzerdefinierten Tools. Jeder Agent spielte im Anwendungsfall Vertragsmanagementsystem eine entscheidende Rolle. Zu den nächsten Schritten können das Erkunden der verschiedenen in i-am-bee GitHub verfügbaren GitHub-Repositorys und das Erstellen weiterer benutzerdefinierter Tools gehören. In den Repositorys finden Sie auch Python-Notebooks für Einsteiger, um die Kernkomponenten von BeeAI besser zu verstehen, wie z. B. PromptTemplates , Nachrichten , Hauptspeicher und Emitter für Observability.

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