Ein persönlicher Erfahrungsbericht von OpenManus auf einer runpod.io-Instanz (Teil 1)

Um im Thema fit zu werden und um mögliche Anwendungsszenarien für zukünftige Kundenprojekte zu testen, habe ich OpenManus ausprobiert. OpenManus ist ein AI-Agent. Ein AI-Agent ist wie ein Sprachmodell, was aber selbstständig (kleine) Entscheidungen trifft und Tools benutzen kann. Zum Beispiel kann ein AI-Agent eine Urlaubsplanung anhand von live im Internet recherchierten Daten vornehmen. Er ist nicht auf den in den Gewichten eines LLMs gespeicherten Erfahrungsschatz angewiesen. Ferner kann er auch z.B. Dinge im Internet bestellen - so weit je die Versprechungen. In diesem Blogartikel zeige ich die Installation und die Ausführung eines ersten Prompts und eine Fehlerbehebung. Die Installation von OpenManus ist an diesen Artikel angelehnt:
https://dev.to/nodeshiftcloud/how-to-install-run-openmanus-locally-with-ollama-no-api-keys-required-2o4i
Da ich zur Zeit lokal keine Grafikkarte mit mindestens 24Gb-VRAM zur Verfügung habe, habe ich mich für eine private Cloudinstanz bei runpod.io entschieden. Dadurch kann ich testen, ob ein solches Projekt später auch bei einem Kunden unabhängig von einer Public-API wie z.B. die von OpenAI funktionieren würde.
Als erstes wird bei runpod.io die richtige Instanz erstellt. Ich möchte gerne ein Python-VENV und nicht conda benutzen, weswegen ich mich für eine Instanz entscheide, die Python in der Version 3.12 installiert hat. Deshalb entscheide ich mich für die letzte Ubuntuversion:

Als GPU wähle ich eine Nvidia A40, weil sie genug Tokens pro Sekunde produziert und für rund $0,44 pro Stunde 48Gb-VRAM bietet. Dazu setze ich recht üppige Größen für den Container, damit ich nicht mit Platzproblemen zu kämpfen habe:

Für die Installation von OpenManus führe ich dann folgende Schritte im Container aus:
apt install git python-3.12-venv pciutils lshw screen
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus && python -m venv openmanus
source openmanus/bin/activate
pip install -r requirements.txt
curl -fsSL https://ollama.com/install.sh | sh
screen ollama serve
Danach wird mit Strg. A + D einmal vom screen detached. Nun werden die benötigten Sprachmodelle in Ollama geladen.
ollama run qwq
/bye
ollama run minicpm-v
/bye
Ollama ist nun vorbereitet. Solange die Screen-Session aktiv ist, läuft nun das Ollama-LLM und wartet auf eingehende Verbindungen von OpenManus. Dadurch sind externe API-Zugriffe wie z.B. zu ChatGPT nicht notwendig. Ich habe nun eine lokale API, die ich ansprechen kann. Als nächstes muss OpenManus so konfiguriert werden, dass es den lokalen Ollama-Server anspricht. Dazu erstelle ich die Datei config/config.toml folgendermaßen (es empfiehlt sich sie aus den Beispieldateien zu kopieren):
# config/config.toml
# Global LLM configuration
[llm] #OLLAMA:
api_type = 'ollama'
model = "qwq" # The LLM model to use
base_url = "http://localhost:11434/v1" # API endpoint URL
api_key = "ollama" # Your API key
max_tokens = 4096 # Maximum number of tokens in the response
temperature = 0.0 # Controls randomness
[llm.vision] #OLLAMA VISION:
api_type = 'ollama'
model = "minicpm-v" # The vision model to use
base_url = "http://localhost:11434/v1" # API endpoint URL for vision model
api_key = "ollama" # Your API key for vision model
max_tokens = 4096 # Maximum number of tokens in the response
temperature = 0.0 # Controls randomness for vision model
Da in einer Docker-Instanz in irgendeinem Rechenzentrum keine GUI für mich bereitsteht, wende ich noch folgenden Patch an:
--- "app/tool/browser_use_tool copy.py" 2025-04-05 22:14:37.860026340 +0000
+++ app/tool/browser_use_tool.py 2025-04-05 21:26:38.504434036 +0000
@@ -141,7 +141,7 @@
async def _ensure_browser_initialized(self) -> BrowserContext:
"""Ensure browser and context are initialized."""
if self.browser is None:
- browser_config_kwargs = {"headless": False, "disable_security": True}
+ browser_config_kwargs = {"headless": True, "disable_security": True}
if config.browser_config:
from browser_use.browser.browser import ProxySettings
Nun wird OpenManus ausgeführt:
deactivate
cd OpenManus
python main.py
Der Agent fragt nun nach einem Prompt. Ich bitte ihn darum mir eine Nvidia RTX 5090 zu bestellen. Ferner gebe ich ihm noch die Info, dass wir in Deutschland seien.

Der Agent fängt selbstständig an die notwendigen Schritte auszuführen. Man kann ihm dabei beim Denken zusehen. Jedoch gibt es relativ schnell einen Fehler:

Dem Ubuntu-System fehlen Abhängigkeiten für den Browser, den der Agent benutzen wollte. Diese installiere ich:
apt install libnss3 libnspr4 libatk1.0-0t64 libatspi2.0-0t64 libxcomposite1 libxdamage1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libxkbcommon0 libasound2t64 libasound2t64
Nach einem erneuten Start von OpenManus funktioniert nun das Surfen.

Jedoch kommt es kurz danach zu einem weiteren Fehler. OpenManus schafft es die richtigen Angeboten herauszufinden, jedoch crasht der Seitenaufruf. Diesen Fehler werde ich nun untersuchen und in einem weiteren Artikel aufzeigen.

Interessant ist jedoch, dass OpenManus selbst diesen Fehler erkennt und nun versucht damit umzugehen. Dabei legt der Agent gleichermaßen die Denk- und Entscheidungsprozesse offen. Durch diese Ausgabe kann man eine Idee davon bekommen, wie ein solcher Agent funktioniert. Schlussendlich gibt der Agent bei mir auf, weil ihm einfach noch weitere Mittel fehlen. Da geht es der Maschine wie den Menschen: Wenn die Werkzeuge ausgehen, ist eben nichts mehr zu machen.
Dieser erste etwa halbstündige Test zeigt großes Potential. Ich kann mir vorstellen, dass in Kombination mit der maschinellen API-Beschreibung MCP ein persönlicher Agent auch Zugriff auf das Paypal-Konto und weitere Daten bekommen und so Aufgaben komplett autonom ausführen könnte. Daher werde ich mir als nächstes OpenManus in Kombination mit MCP ansehen und weiter berichten.