Das Atomic Agents-Framework ist modular, erweiterbar und einfach zu verwenden. Sein Hauptziel besteht darin, redundante Komplexität, unnötige Abstraktionen und versteckte Annahmen zu eliminieren und gleichzeitig eine flexible und leistungsstarke Plattform für die Erstellung von KI-Anwendungen durch Atomizität bereitzustellen. Das Framework stellt eine Reihe von Tools und Agenten bereit, die kombiniert werden können, um leistungsstarke Anwendungen zu erstellen. Es basiert auf Instructor und nutzt die Leistungsfähigkeit von Pydantic für die Daten- und Schemavalidierung und Serialisierung.
Während sich bestehende Frameworks für agentische KI auf den Aufbau autonomer Multi-Agenten-Systeme konzentrieren, mangelt es ihnen oft an der Kontrolle und Vorhersagbarkeit, die für reale Anwendungen erforderlich sind. Unternehmen benötigen KI-Systeme, die konsistente, zuverlässige Ergebnisse liefern, die auf ihre Marke und ihre Ziele abgestimmt sind.
Atomic Agents geht auf diesen Bedarf ein, indem es Folgendes bietet:
Modularität: Erstellen Sie KI-Anwendungen durch die Kombination kleiner, wiederverwendbarer Komponenten.
Vorhersehbarkeit: Definieren Sie klare Eingabe- und Ausgabeschemata, um ein konsistentes Verhalten sicherzustellen.
Erweiterbarkeit: Einfaches Austauschen von Komponenten oder Integrieren neuer Komponenten, ohne das gesamte System zu beeinträchtigen.
Steuerung: Passen Sie jeden Teil des Systems individuell an, von Systemansagen bis hin zu Tool-Integrationen.
Bei Atomic Agents besteht ein Agent aus mehreren Schlüsselkomponenten:
Systemaufforderung: Definiert das Verhalten und den Zweck des Agenten.
Eingabeschema: Gibt die Struktur und Validierungsregeln für die Eingabe des Agenten an.
Ausgabeschema: Gibt die Struktur und Validierungsregeln für die Ausgabe des Agenten an.
Speicher: Speichert den Gesprächsverlauf oder andere relevante Daten.
Kontextanbieter: Fügen Sie zur Laufzeit dynamischen Kontext in die Systemeingabeaufforderung des Agenten ein.
Hier ist ein allgemeines Architekturdiagramm:
Um Atomic Agents zu installieren, können Sie pip verwenden:
pip Atomic-Agents installieren
Stellen Sie sicher, dass Sie auch den Anbieter installieren, den Sie verwenden möchten. Um beispielsweise OpenAI und Groq zu verwenden, können Sie die Pakete openai
und groq
installieren:
pip install openai groq
Dadurch wird auch der CLI Atomic Assembler installiert, mit dem Tools (und bald auch Agents und Pipelines) heruntergeladen werden können.
Für die lokale Entwicklung können Sie aus dem Repository installieren:
Git-Klon https://github.com/BrainBlend-AI/atomic-agents.gitcd atomic-agents Poesieinstallation
Atomic Agents verwendet eine Monorepo-Struktur mit den folgenden Hauptkomponenten:
atomic-agents/
: Die Kernbibliothek der Atomic Agents
atomic-assembler/
: Das CLI-Tool zum Verwalten von Atomic Agents-Komponenten
atomic-examples/
: Beispielprojekte, die die Verwendung von Atomic Agents demonstrieren
atomic-forge/
: Eine Sammlung von Tools, die mit Atomic Agents verwendet werden können
Eine vollständige Liste der Beispiele finden Sie im Beispielverzeichnis.
Wir bemühen uns, jedes Beispiel gründlich zu dokumentieren. Wenn jedoch etwas unklar ist, zögern Sie bitte nicht, ein Problem zu eröffnen oder eine Anfrage zu stellen, um die Dokumentation zu verbessern.
Hier ist ein kurzer Ausschnitt, der zeigt, wie einfach es ist, mit Atomic Agents einen leistungsstarken Agenten zu erstellen:
# Definieren Sie eine benutzerdefinierte Ausgabeschemaklasse CustomOutputSchema(BaseIOSchema):""" docstring für das benutzerdefinierte Ausgabeschema """chat_message: str = Field(..., description="Die Chat-Nachricht vom Agenten.")suggested_questions: List[str ] = Field(..., description="Vorgeschlagene Folgefragen.")# Richten Sie das System ein promptsystem_prompt_generator = SystemPromptGenerator(background=["Dieser Assistent ist sachkundig, hilfreich und schlägt Folgefragen vor. „],steps=[„Analysieren Sie die Eingaben des Benutzers, um den Kontext und die Absicht zu verstehen ."],output_instructions=["Beantworten Sie Benutzeranfragen mit klaren und prägnanten Informationen.''Schließen Sie jede Antwort mit drei relevanten vorgeschlagenen Fragen für den Benutzer ab.'] )# Initialisieren Sie den Agentagent = BaseAgent(config=BaseAgentConfig(client=your_openai_client, # Ersetzen Sie ihn durch Ihr tatsächliches clientmodel="gpt-4o-mini",system_prompt_generator=system_prompt_generator,memory=AgentMemory(),output_schema=CustomOutputSchema) )# Verwenden Sie agentresponse = agent.run(user_input)print(f"Agent: {response.chat_message}")print("Vorgeschlagene Fragen:") für die Frage in Antwort.suggested_questions:print(f"- {question}")
Dieses Snippet zeigt, wie Sie einen anpassbaren Agenten erstellen, der auf Benutzeranfragen antwortet und Folgefragen vorschlägt. Vollständige, ausführbare Beispiele finden Sie in den folgenden Dateien im Verzeichnis atomic-examples/quickstart/quickstart/
:
Einfacher Chatbot Ein minimales Chatbot-Beispiel, um Ihnen den Einstieg zu erleichtern.
Benutzerdefinierter Chatbot Ein fortgeschritteneres Beispiel mit einer benutzerdefinierten Systemaufforderung.
Benutzerdefinierter Chatbot mit Schema Ein erweitertes Beispiel mit einem benutzerdefinierten Ausgabeschema.
Multi-Provider-Chatbot Demonstriert die Nutzung verschiedener Anbieter wie Ollama oder Groq.
Zusätzlich zu den Schnellstartbeispielen haben wir komplexere Beispiele, die die Leistungsfähigkeit von Atomic Agents demonstrieren:
Web Search Agent: Ein intelligenter Agent, der Websuchen durchführt und auf der Grundlage der Ergebnisse Fragen beantwortet.
YouTube Summarizer: Ein Agent, der Wissen aus YouTube-Videos extrahiert und zusammenfasst.
Eine vollständige Liste der Beispiele finden Sie im Beispielverzeichnis.
Diese Beispiele bieten einen guten Ausgangspunkt für das Verständnis und die Verwendung von Atomic Agents.
Mit Atomic Agents können Sie Ihre Agenten mithilfe von Kontextanbietern um dynamischen Kontext erweitern. Mit Kontextanbietern können Sie zur Laufzeit zusätzliche Informationen in die Systemeingabeaufforderung des Agenten einfügen, wodurch Ihre Agenten flexibler und kontextbewusster werden.
Um einen Kontextanbieter zu verwenden, erstellen Sie eine Klasse, die von SystemPromptContextProviderBase
erbt und die Methode get_info()
implementiert, die die Kontextzeichenfolge zurückgibt, die der Systemeingabeaufforderung hinzugefügt werden soll.
Hier ist ein einfaches Beispiel:
from atomic_agents.lib.components.system_prompt_generator import SystemPromptContextProviderBaseclass SearchResultsProvider(SystemPromptContextProviderBase):def __init__(self, title: str, search_results: List[str]):super().__init__(title=title)self.search_results = search_resultsdef get_info(self ) -> str:return "n".join(self.search_results)
Anschließend können Sie Ihren Kontextanbieter beim Agenten registrieren:
# Initialisieren Sie Ihren Kontextanbieter mit dynamischen datasearch_results_provider = SearchResultsProvider(title="Search Results",search_results=["Result 1", "Result 2", "Result 3"] )# Registrieren Sie den Kontextanbieter beim Agentagent.register_context_provider("search_results", search_results_provider)
Dadurch kann Ihr Agent die Suchergebnisse (oder jeden anderen Kontext) in seine Systemaufforderung einbeziehen und so seine Antworten auf der Grundlage der neuesten Informationen verbessern.
Atomic Agents erleichtert die Verkettung von Agenten und Tools durch die Ausrichtung ihrer Eingabe- und Ausgabeschemata. Dieses Design ermöglicht Ihnen den mühelosen Austausch von Komponenten und fördert so die Modularität und Wiederverwendbarkeit Ihrer KI-Anwendungen.
Angenommen, Sie haben einen Agenten, der Suchanfragen generiert, und Sie möchten diese Suchanfragen mit verschiedenen Suchtools verwenden. Indem Sie das Ausgabeschema des Agenten an das Eingabeschema des Suchtools anpassen, können Sie diese problemlos miteinander verketten oder zwischen verschiedenen Suchanbietern wechseln.
So können Sie dies erreichen:
import Instructorimport openaifrom pydantic import Fieldfrom atomic_agents.agents.base_agent import BaseIOSchema, BaseAgent, BaseAgentConfigfrom atomic_agents.lib.components.system_prompt_generator import SystemPromptGenerator# Importieren Sie das Suchtool, das Sie verwenden möchten, from web_search_agent.tools.searxng_search import SearxNGSearchTool# Definieren Sie das Eingabeschema für die Abfrage Agentenklasse QueryAgentInputSchema(BaseIOSchema):"""Eingabeschema für den QueryAgent."""Anweisung: str = Field(..., Beschreibung="Anweisung zum Generieren von Suchabfragen für.")num_queries: int = Field(..., Beschreibung ="Anzahl der zu generierenden Abfragen.")# Initialisieren Sie die Abfrage agentquery_agent = BaseAgent(BaseAgentConfig(client=instructor.from_openai(openai.OpenAI()),model="gpt-4o-mini",system_prompt_generator=SystemPromptGenerator(background=["Sie sind ein Experte für intelligente Abfragegenerierung.","Ihre Aufgabe ist es Generieren Sie eine bestimmte Anzahl unterschiedlicher und hochrelevanter Abfragen basierend auf einer bestimmten Anweisung.],steps=["Empfangen Sie die Anweisung und die Anzahl der zu generierenden Abfragen.","Generieren Sie die Abfragen in JSON Format."],output_instructions=["Stellen Sie sicher, dass jede Abfrage einzigartig und relevant ist.","Stellen Sie die Abfragen im erwarteten Schema bereit.], ),input_schema=QueryAgentInputSchema,output_schema=SearxNGSearchTool.input_schema, # Ausgabeschema ausrichten) )
In diesem Beispiel:
Modularität : Indem Sie das output_schema
des query_agent
so einstellen, dass es mit dem input_schema
von SearxNGSearchTool
übereinstimmt, können Sie die Ausgabe des Agenten direkt als Eingabe für das Tool verwenden.
Austauschbarkeit : Wenn Sie sich entscheiden, zu einem anderen Suchanbieter zu wechseln, können Sie ein anderes Suchtool importieren und das output_schema
entsprechend aktualisieren.
Um beispielsweise zu einem anderen Suchdienst zu wechseln:
# Importieren Sie ein anderes Suchtool aus web_search_agent.tools.another_search import AnotherSearchTool# Aktualisieren Sie das Ausgabeschemaquery_agent.config.output_schema = AnotherSearchTool.input_schema
Dieses Entwurfsmuster vereinfacht den Prozess der Verkettung von Agenten und Tools und macht Ihre KI-Anwendungen anpassungsfähiger und einfacher zu warten.
Um die CLI auszuführen, führen Sie einfach den folgenden Befehl aus:
atomar
Oder wenn Sie Atomic Agents with Poetry installiert haben, zum Beispiel:
Poesie läuft atomar
Oder wenn Sie Atomic Agents mit UV installiert haben:
UV-Lauf atomar
Nachdem Sie diesen Befehl ausgeführt haben, wird ein Menü angezeigt, in dem Sie Tools herunterladen können.
Jedes Tool hat sein eigenes:
Eingabeschema
Ausgabeschema
Anwendungsbeispiel
Abhängigkeiten
Installationsanleitung
Die atomic-assembler
CLI gibt Ihnen die vollständige Kontrolle über Ihre Tools und vermeidet unnötige Abhängigkeiten. Es macht das Modifizieren von Werkzeugen einfacher. Darüber hinaus verfügt jedes Werkzeug über eine eigene Reihe von Zuverlässigkeitstests.
Aber Sie sind nicht auf die CLI beschränkt! Wenn Sie möchten, können Sie direkt auf die Werkzeugordner zugreifen und diese manuell verwalten, indem Sie sie einfach nach Bedarf kopieren und einfügen.
Atomic Agents hängt vom Instructor-Paket ab. Das bedeutet, dass in allen Beispielen, in denen OpenAI verwendet wird, auch jede andere von Instructor unterstützte API verwendet werden kann – wie Ollama, Groq, Mistral, Cohere, Anthropic, Gemini und mehr. Eine vollständige Liste finden Sie in der Dozentendokumentation auf der GitHub-Seite.
Die API-Dokumentation finden Sie hier.
Atomic Forge ist eine Sammlung von Tools, die mit Atomic Agents verwendet werden können, um deren Funktionalität zu erweitern. Zu den aktuellen Tools gehören:
Kalkulator
SearxNG-Suche
YouTube-Transkript-Scraper
Weitere Informationen zur Verwendung und Erstellung von Tools finden Sie in der Atomic Forge README.
Wir freuen uns über Beiträge! Ausführliche Informationen darüber, wie Sie zu Atomic Agents beitragen können, finden Sie im Entwicklerhandbuch. Hier sind einige schnelle Schritte:
Forken Sie das Repository
Erstellen Sie einen neuen Zweig ( git checkout -b feature-branch
)
Nehmen Sie Ihre Änderungen vor
Führen Sie Tests aus ( pytest --cov atomic_agents
)
Formatieren Sie Ihren Code ( black atomic_agents atomic_assembler
)
Flusen Sie Ihren Code ( flake8 atomic_agents atomic_assembler
)
Übernehmen Sie Ihre Änderungen ( git commit -m 'Add some feature'
)
Zum Zweig pushen ( git push origin feature-branch
)
Öffnen Sie eine Pull-Anfrage
Die vollständige Entwicklungseinrichtung und Richtlinien finden Sie im Entwicklerhandbuch.
Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der LIZENZ-Datei.