Max Nardit
Lokale LLMs

Webseiten mit Share2Agent an LM Studio senden

Verarbeite Webseiten mit lokalen LLM-Modellen, die in LM Studio laufen. Share2Agent extrahiert den Seiteninhalt und sendet ihn an einen Webhook-Receiver, der die OpenAI-kompatible API von LM Studio aufruft. Fasse zusammen, übersetze oder analysiere jede Seite, ohne Daten in die Cloud zu schicken.


Voraussetzungen

  • LM Studio installiert und ein Modell geladen (lmstudio.ai)
  • Lokaler Server läuft in LM Studio (Tab "Developer")
  • Share2Agent Chrome-Erweiterung installiert
  • Python 3.10+

Schritt 1: LM-Studio-Server starten

  1. Öffne LM Studio und lade ein Modell (z.B. Llama 3.2, Mistral, Phi-3).
  2. Wechsle in den Tab Developer.
  3. Klicke auf Start Server. Der Server läuft standardmäßig unter http://localhost:1234.
  4. Verifiziere, dass er funktioniert:
bash
curl http://localhost:1234/v1/models

Du solltest eine JSON-Antwort sehen, die dein geladenes Modell auflistet.


Schritt 2: Webhook-Receiver bauen

Dieses Skript empfängt Seiten von Share2Agent und sendet den Inhalt an den OpenAI-kompatiblen Endpoint von LM Studio.

Speichere das als lmstudio_receiver.py:

python
#!/usr/bin/env python3
"""Share2Agent → LM Studio webhook receiver."""
 
import json
import urllib.request
from datetime import datetime
from http.server import HTTPServer, BaseHTTPRequestHandler
from pathlib import Path
 
PORT = 9876
OUTPUT_DIR = Path.home() / "share2agent-lmstudio"
LM_STUDIO_URL = "http://localhost:1234/v1/chat/completions"
DEFAULT_PROMPT = "Summarize this article in 3-5 bullet points."
 
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
 
 
def call_lm_studio(prompt: str, content: str) -> str:
    payload = json.dumps({
        "messages": [
            {"role": "system", "content": prompt},
            {"role": "user", "content": content},
        ],
        "temperature": 0.3,
        "max_tokens": 2048,
        "stream": False,
    }).encode()
    req = urllib.request.Request(
        LM_STUDIO_URL,
        data=payload,
        headers={"Content-Type": "application/json"},
    )
    with urllib.request.urlopen(req, timeout=120) as resp:
        data = json.loads(resp.read())
        return data["choices"][0]["message"]["content"]
 
 
class Handler(BaseHTTPRequestHandler):
    def do_POST(self):
        length = int(self.headers.get("Content-Length", 0))
        data = json.loads(self.rfile.read(length))
 
        title = data.get("title", "untitled")
        content = data.get("content", "")
        comment = data.get("comment", "").strip()
        prompt = comment if comment else DEFAULT_PROMPT
 
        print(f"Processing: {title[:60]}...")
        result = call_lm_studio(prompt, content)
 
        # Save result
        ts = datetime.now().strftime("%Y-%m-%d-%H%M")
        slug = title[:40].lower().replace(" ", "-")
        out = OUTPUT_DIR / f"{ts}-{slug}.md"
        out.write_text(
            f"# {title}\n\n"
            f"**Prompt:** {prompt}\n"
            f"**Source:** {data.get('url', '')}\n\n"
            f"---\n\n{result}\n"
        )
        print(f"Saved: {out.name}")
 
        self.send_response(200)
        self.send_header("Content-Type", "application/json")
        self.send_header("Access-Control-Allow-Origin", "*")
        self.end_headers()
        self.wfile.write(json.dumps({"status": "ok"}).encode())
 
    def do_OPTIONS(self):
        self.send_response(204)
        self.send_header("Access-Control-Allow-Origin", "*")
        self.send_header("Access-Control-Allow-Methods", "POST, OPTIONS")
        self.send_header("Access-Control-Allow-Headers", "Content-Type")
        self.end_headers()
 
 
if __name__ == "__main__":
    print(f"LM Studio receiver on :{PORT}")
    HTTPServer(("0.0.0.0", PORT), Handler).serve_forever()

Der entscheidende Unterschied zu Ollama: LM Studio nutzt das OpenAI-Chat-Completions-Format (/v1/chat/completions mit messages-Array) statt Ollamas Generate-Endpoint. Der Kommentar aus Share2Agent wird zum System-Prompt, der Seiteninhalt zur User-Message.


Schritt 3: Receiver starten

bash
python3 -u lmstudio_receiver.py

Schritt 4: Share2Agent konfigurieren

  1. Klicke auf das Share2Agent-Icon in Chrome.
  2. Öffne Settings.
  3. Setze die Webhook URL auf http://localhost:9876.
  4. Speichere.

Schritt 5: Eine Seite verarbeiten

  1. Öffne irgendeine Webseite.
  2. Klicke auf das Share2Agent-Icon.
  3. Schreibe eine Instruktion in das comment-Feld:
    • Summarize the key arguments
    • Extract all API endpoints mentioned
    • Translate to German
    • List action items from this meeting notes page
  4. Klicke auf Share.

Lass den Kommentar leer, um den Standard-Summarization-Prompt zu nutzen.

Ergebnisse landen in ~/share2agent-lmstudio/:

~/share2agent-lmstudio/2026-03-28-1430-react-server-components.md

Anpassen

Modellauswahl: LM Studio nutzt das aktuell geladene Modell. Wechsle Modelle in der LM-Studio-UI, ohne Code-Änderung.

Temperature und Tokens: Stelle temperature (0.0 = deterministisch, 1.0 = kreativ) und max_tokens im Skript ein, um Stil und Länge zu steuern.

Server-Port: Wenn du den Port von LM Studio geändert hast, passe die Variable LM_STUDIO_URL an.


Was als Nächstes?

  • Modell-Routing einbauen - parse den Kommentar nach Keywords (z.B. "creative:" oder "precise:") und passe die Temperature dynamisch an.
  • Reading-List-Processor bauen - teile mehrere Artikel und lass danach ein zweites Skript alle gespeicherten Ergebnisse einlesen und einen kombinierten Brief generieren.
  • Mit anderen OpenAI-kompatiblen Tools verbinden - da LM Studio das OpenAI-API-Format spricht, kannst du es gegen jedes kompatible Backend (vLLM, llama.cpp-Server, etc.) tauschen, ohne den Receiver-Code zu ändern.
Webseiten mit Share2Agent an LM Studio senden