🚀 Baue in 5 einfachen Schritten Deinen ersten KI-Agenten (100% lokal) 🚀 Baue in 5 einfachen Schritten Deinen ersten KI-Agenten (100% lokal)

🚀 Baue in 5 einfachen Schritten Deinen ersten KI-Agenten (100% lokal)

🚀 Baue in 5 einfachen Schritten Deinen ersten KI-Agenten (100% lokal)

Foto von ZHENYU LUO auf Qiubyte.

 

KI-Agenten und RAG (mehr erfahren) sind die heißen Themen der KI-Community 2024. Ein allgemeines und praktisches Verständnis von Agenten und ihrer Funktionsweise ist erforderlich, wenn man in diesem Bereich arbeitet. In diesem Artikel bauen wir eine einfache Crew aus KI-Agenten, die einen wissenschaftlichen Artikel lesen (den weltberühmten „Attention is All You Need“), einen Blogbeitrag darüber schreiben und einen Titel dafür auswählen. Ich verwende Ollama, um mein LLM lokal auszuführen.

🚀 Baue in 5 einfachen Schritten Deinen ersten KI-Agenten (100% lokal)

KI-Chatbot vs. KI-Agent

KI-Chatbots wie ChatGPT sind dafür konzipiert, mit Menschen über Text oder Sprache zu kommunizieren. Ihre Hauptaufgabe besteht darin, Fragen zu beantworten, Erkenntnisse zu liefern und mithilfe der natürlichen Sprachverarbeitung (NLP) menschliche Sprache zu verstehen und darauf zu reagieren.

KI-Chatbots sprechen und KI-Agenten handeln.

Ein KI-Agent ist dagegen ein breiteres Konzept innerhalb der Künstlichen Intelligenz. Agenten beschränken sich nicht nur auf Konversationen; sie haben ein klares Ziel zu erfüllen und verwenden Werkzeuge und logisches Denken, um verschiedene Methoden zu planen, um dieses Ziel zu erreichen.

Erstellung von Agenten-Crews mit CrewAI

Es ist schwierig, mit LLMs zu arbeiten, ohne Langchain zu kennen. Ich habe es in einem früheren Artikel verwendet, um Flappy Bird in ChatGPT mit Prompt-Engineering zu spielen. Dein erster KI-Agent mit Langchain zu programmieren, könnte jedoch aufgrund der Lernkurve etwas frustrierend werden. CrewAI macht es einfach!

Aufbauend auf Langchain, verfolgt CrewAI einen modularen Ansatz für den Aufbau von Agenten, was es viel intuitiver und schneller macht. Wenn du mit Agenten starten möchtest, beginne mit CrewAI.

Lass uns Programmieren

Inspiriert von Foad Keshehs „Optimizing Everyday Tasks with CrewAI“ erstellen wir Agenten, die einen wissenschaftlichen Artikel lesen und einen Blogbeitrag + Titel dafür schreiben. Dazu müssen wir zuerst…

1. LLM lokal einrichten

Aus verschiedenen Gründen (Kosten, Open-Source-Modelle, Sicherheit usw.) möchtest du deine KI möglicherweise lokal ausführen und deine Ressourcen nutzen. Ollama ist das Mittel der Wahl dafür.

🚀 Baue in 5 einfachen Schritten Deinen ersten KI-Agenten (100% lokal)

Quelle: [Ollama](https://ollama.com/)

Um LLM lokal mit Ollama auszuführen, folge den Anweisungen, lade die Software herunter und installiere sie. Öffne nun eine Befehlszeile und führe aus:

ollama serve

Jetzt fungiert Ollama als Server, und du benötigst ein LLM, das auf diesem Server läuft. Dazu musst du das LLM aus dem Internet abrufen. Ich verwende openhermes und werde später erklären, warum ich mich dafür entschieden habe (es ist wichtig).

ollama pull openhermes

Der Rest ist Code. Zuerst importieren wir die benötigten Pakete.

from dotenv import load_dotenv
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from PyPDF2 import PdfReader
import re

Wir müssen uns auch mit dem lokal laufenden Ollama-Server verbinden. Nimm dir die Befehlszeile, in der du ollama serve ausgeführt hast, und verwende die dort angegebene URL für die base_url hier.

model = ChatOpenAI(
    model="openhermes",
    base_url="http://localhost:11434/v1"
)

2. Werkzeuge

Agenten müssen für eine bestimmte Aufgabe möglicherweise spezifische Werkzeuge verwenden. Viele dieser Werkzeuge sind in crewai enthalten, aber du kannst auch deine eigenen benutzerdefinierten Werkzeuge erstellen. Hier verwenden wir ein Werkzeug, um den Inhalt einer PDF zu lesen und zurückzugeben.

# Werkzeug zum lokalen Laden und Lesen einer PDF
@tool
def fetch_pdf_content(pdf_path: str):
    """
    Liest eine lokale PDF und gibt den Inhalt zurück
    """
    with open(pdf_path, 'rb') as f:
        pdf = PdfReader(f)
        text = '\n'.join(page.extract_text() for page in pdf.pages if page.extract_text())
    processed_text = re.sub(r'\s+', ' ', text).strip()
    return processed_text

3. Agenten

Nun müssen wir drei Agenten definieren:

  • 🤖 Liest den Artikel
  • 🤖 Schreibt einen Beitrag darüber
  • 🤖 Kommt mit einem Titel dafür

Jeder Agent muss eine spezifische Rolle, ein Ziel haben, und eine Hintergrundgeschichte hilft dem Agenten dabei, die von dir gewünschte Rolle zu spielen.

pdf_reader = Agent(
    role='PDF-Inhaltextrahierung',
    goal='Text aus einer PDF im aktuellen lokalen Verzeichnis extrahieren un d vorverarbeiten',
    backstory='Spezialisiert auf die Handhabung und Interpretation von PDF-Dokumenten',
    verbose=True,
    tools=[fetch_pdf_content],
    allow_delegation=False,
    llm=model
)
article_writer = Agent(
    role='Artikelersteller',
    goal='Einen prägnanten und fesselnden Artikel schreiben',
    backstory='Experte im Erstellen informativer und fesselnder Artikel',
    verbose=True,
    allow_delegation=False,
    llm=model
)
title_creator = Agent(
    role='Titelgenerator',
    goal='Einen ansprechenden Titel für den Artikel generieren',
    backstory='Geschickt im Gestalten ansprechender und relevanter Titel',
    verbose=True,
    allow_delegation=False,
    llm=model
)

4. Aufgaben

Jede Aufgabe ist etwas, das deine Agenten erledigen sollen. In unserem Fall definieren wir drei Aufgaben und weisen jede einem Agenten zu. Jede Aufgabe benötigt:

  • 📝 Beschreibung: Eine knappe Beschreibung dessen, was getan werden muss
  • 👤 Agent: Welcher Agent ist dafür verantwortlich
  • 🏁 Erwartete Ausgabe: Die Ausgabe, die wir erhalten möchten
def pdf_reading_task(pdf):
    return Task(
        description=f"Lies und verarbeite die PDF unter diesem lokalen Pfad: {pdf_local_relative_path}",
        agent=pdf_reader,
        expected_output="Aus einer PDF extrahierter und vorverarbeiteter Text",
    )
task_article_drafting = Task(
    description="Erstelle einen prägnanten Artikel mit 8-10 Absätzen basierend auf dem extrahierten PDF-Inhalt.",
    agent=article_writer,
    expected_output="8-10 Absätze, die die Kernpunkte der PDF beschreiben",
)
task_title_generation = Task(
    description="Generiere einen fesselnden und relevanten Titel für den Artikel.",
    agent=title_creator,
    expected_output="Ein Titel mit ca. 5-7 Wörtern"
)

5. Erstelle die Crew und starte! 🚀

Wie der Name crewai schon sagt, ist das Ziel, dass mehrere Agenten mehrere Aufgaben erledigen. Dafür müssen wir einfach die Klasse Crew instanziieren und alle zuvor definierten Aufgaben und Agenten übergeben. Durch Aufruf der Methode kickoff() auf dem Crew-Objekt beginnt der Zauber 🪄.

crew = Crew(
    agents=[pdf_reader, article_writer, title_creator],
    tasks=[pdf_reading_task(pdf_local_relative_path), 
    task_article_drafting, 
    task_title_generation],
    verbose=2
)
# Lass uns starten!
result = crew.kickoff()

Nach einer Weile ist das Ergebnis der harten Arbeit unserer Agenten ein Blogbeitrag und ein Titel, den du hier sehen kannst (der Beitrag ist tatsächlich 2-3 Mal länger):

Transformatoren entfesselt: Nutze Aufmerksamkeit für Natürliche Sprachverarbeitung
=====================================================================
In "Attention Is All You Need" von Ashish Vaswani et al. wird eine Transformer-
Architektur vorgeschlagen, die einen Aufmerksamkeitsmechanismus als primäres
Mittel für die Informationsinteraktion zwischen ihren Komponenten nutzt. Dieser
Aufmerksamkeitsmechanismus ermöglicht es dem Modell, sich auf relevante
Eingabeelemente zu konzentrieren und langreichweitige Abhängigkeiten in der
Eingabesequenz zu erfassen, was zu einer verbesserten Leistung im Vergleich zu
herkömmlichen rekurrenten neuronalen Netzen (RNNs) führt...

Ob du es glaubst oder nicht, KI-Agenten zu erstellen, die kleine und spezifische Aufgaben ausführen, ist genauso einfach. Glücklicherweise sind viele der Prozesse in der KI heute hochgradig modular und mit vielen Abstraktionsebenen versehen, was bedeutet, dass du nur wenige Codezeilen benötigst. Die ausgefeilten Bibliotheken kümmern sich um den Rest.

Welches Modell für KI-Agenten verwenden?

Einige Modelle sind für agentenbasierte Zwecke feinabgestimmt. Das bedeutet, dass sie mehr Fähigkeiten zum Schlussfolgern und Entwickeln von Strategien für die Ausführung von Aufgaben haben sollen. Du möchtest Modelle, die sich nicht von ihren Werkzeugen verwirren lassennicht vergessen, welcher Schritt als Nächstes kommt, und nicht in endlose Schleifen geraten, in denen sie immer wieder die gleichen Fehler machen.

🚀 Baue in 5 einfachen Schritten Deinen ersten KI-Agenten (100% lokal)

Verschiedene Modelle von Ollama. (Quelle: [Ollama](https://ollama.com/library?sort=featured))

Ich habe mehrere Modelle für diesen Anwendungsfall getestet und hier sind meine Erfahrungen mit jedem Modell:

  • gpt-3.5-turbo: Die kostenlose Version von OpenAIs ChatGPT konnte die Aufgabe wie ein Kinderspiel erledigen. Es war schnell und machte keine Fehler auf dem Weg.
  • llama-3–8b und llama-3-70b-instruct: Metas llama-3 war meine erste Wahl, und ich konnte nicht enttäuschter sein. Die leichtgewichtige Version von llama3 mit 8B Parametern geriet in eine endlose Schleife, in der sie nicht wusste, welche Variable an das Werkzeug fetch-pdf-content übergeben werden sollte. Ich denke, das Problem war, dass es, als es versuchte, den Namen der PDF an die Funktion zu übergeben, das letzte " des PDF-Namens verpasste und eine Ausnahme auslöste. Überraschenderweise machte die feinabgestimmte ~45GB-Version von Llama3 mit 70B Parametern keinen Unterschied und fiel in dieselbe Falle.
  • openhermes: Nachdem ich sehr frustriert war, dies lokal zu machen, bin ich auf diese feinabgestimmte 7B-Version von Mistral gestoßen, die sehr leichtgewichtig ist und mühelos agentenbasierte Aufgaben erledigt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert