Pi Agent und lokale llama.cpp-Modelle

Pi Agent bietet integrierte Unterstützung für llama.cpp, sodass Sie Open-Source-Großmodelle lokal ohne Cloud-APIs ausführen können.


Was ist llama.cpp

llama.cpp ist eine leistungsstarke LLM-Inferenz-Engine, die Open-Source-LLMs auf Consumer-Hardware ausführen kann.

Es unterstützt CPU-Inferenz (drastische Reduzierung des Speicherbedarfs durch Quantisierung) und GPU-Beschleunigung (CUDA, Metal, Vulkan usw.).

Pi Agent kommuniziert über denllama.cpp Router-Servermit lokalen Modellen.

Pi Agent 与 llama.cpp 路由器、本地模型文件的链路示意,以及可选的云端路径


llama.cpp konfigurieren

Die Konfiguration umfasst drei Schritte: Zuerst den llama-server Router starten, dann den llama.cpp Provider registrieren und schließlich ein Modell laden und auswählen.

llama-server Router starten

Ohne-moder--modelParameter startet llama-server im Router-Modus.

Sobald ein Modellparameter übergeben wird, wechselt llama-server in den Einzelmodell-Modus und durchsucht das Modellverzeichnis nicht mehr.

Der Router lädt oder entlädt bei Bedarf--models-dirGGUF-Modelle im Verzeichnis. Häufige Parameter sind --models-dir (Modellverzeichnis), --no-models-autoload (automatisches Laden deaktivieren), --jinja (Konversationsvorlagen und Tool-Calling-Unterstützung aktivieren), -ngl (Anzahl der auf GPU ausgelagerten Schichten) und -c 32768 (Kontextfenster pro Modell).

llama-server \
  --models-dir ~/models \
  --no-models-autoload \
  --jinja \
  --host 127.0.0.1 \
  --port 8080 \
  -ngl 999 \
  -c 32768

Nach dem Start können Sie die Endpunkte /health und /models verwenden, um zu prüfen, ob der Router erreichbar ist und ob Modelle erkannt werden.

Bei llama.cpp anmelden

Im interaktiven Modus von Pi Agent:

/login llama.cpp

Dieser Schritt registriert nur den lokalen Anbieter; es ist keine Kontoauthentifizierung erforderlich, aber Sie müssen die Router-Adresse angeben (Standard: http://127.0.0.1:8080).

Nach der Ausführung fragt Pi nach der Router-URL und einem optionalen API-Key. Bei lokalen Diensten können Sie den API-Key in der Regel leer lassen.

Lokale Modelle verwalten

Verwenden Sie den/llama-Befehl, um das Menü zur Modellverwaltung zu öffnen:

/llama

Wählen Sie im Menü ein nicht geladenes Modell aus und drücken Sie die Eingabetaste, um es in den Speicher zu laden.

Wählen Sie ein geladenes Modell aus und drücken Sie die Eingabetaste, um es zu entladen.

Wählen Sie den MenüpunktModell herunterladen...aus, um Hugging Face zu durchsuchen und neue Modelle herunterzuladen. Beim Laden oder Herunterladen drücken Sie Escape, um den Abbruch zu bestätigen.

Das Menü zeigt immer den tatsächlichen aktuellen Status des Routers an, und im /model-Selektor erscheinen nur geladene Modelle.

Zu einem lokalen Modell wechseln

Verwenden Sie den/model-Befehl, um ein geladenes lokales Modell auszuwählen.

Tastenkürzel: Ctrl+L öffnet die Modellauswahl, Ctrl+P wechselt zwischen Modellen.


Empfohlene Open-Source-Modelle

Hier sind einige Open-Source-Coding-Modelle, die für den lokalen Betrieb geeignet sind:

ModellParametersMinimaler VRAM/RAMAnwendungsfälle
Qwen 2.5 Coder7B / 14B / 32B8G / 16G / 32GAllgemeine Programmierung, mehrsprachig
DeepSeek Coder V216B / 236B16G / 128G+Komplexe Programmieraufgaben
CodeLlama7B / 13B / 34B8G / 16G / 32GCodevervollständigung, allgemeine Programmierung
Mistral7B8GLeichtgewichtiger Programmierassistent

Die Coding-Fähigkeit lokaler Modelle ist normalerweise schwächer als die von Top-Cloud-Modellen (wie Claude Sonnet, GPT-4o), aber sie sind eine sehr gute Alternative in Szenarien mit eingeschränkten Netzwerken, hohen Anforderungen an die Datensensibilität oder häufiger Nutzung.


Modellspeicherung

Das Modellverzeichnis wird durch den llama-server-Startparameter--models-dir(z. B. ~/models) bestimmt; Modell-Downloads werden ebenfalls vom llama.cpp-Server ausgeführt.

Modelldateien sind normalerweise groß (von einigen GB bis zu Dutzenden GB). Bitte stellen Sie sicher, dass das Verzeichnis über ausreichend Speicherplatz verfügt.


Benutzerdefinierter llama.cpp-Server

Wenn Ihr llama.cpp-Server auf einem nicht standardmäßigen Port oder auf einem Remote-Rechner läuft, gibt es zwei Möglichkeiten zur Verbindung.

Der Zero-Code-Ansatz besteht darin, die UmgebungsvariablenLLAMA_BASE_URLundLLAMA_API_KEYso zu setzen, dass sie auf einen benutzerdefinierten llama.cpp-Server zeigen; es ist nicht nötig, Erweiterungen zu schreiben oder /login zu verwenden.

export LLAMA_BASE_URL=http://192.168.1.20:8080
export LLAMA_API_KEY=optional-secret
pi

Wenn auf dem Server ein API-Schlüssel aktiviert ist, muss llama-server mit demselben --api-key-Wert gestartet werden, und --host 127.0.0.1 muss beibehalten werden, um den Zugriff auf den lokalen Rechner zu beschränken.

Wenn Sie nur eine Verbindung zu einer OpenAI-kompatiblen API herstellen müssen, ist der models.json-Ansatz einfacher; siehe das Kapitel „Verbindung zu DeepSeek herstellen“. Verwenden Sie den Erweiterungsansatz, wenn Sie die vollständige Kontrolle über den Anfrageablauf benötigen.

Registrieren Sie den llama.cpp-Anbieter in einer Erweiterung:

Beispiel

// Dateipfad: ~/.pi/agent/extensions/llamacpp-provider.ts
pi.registerProvider("llama.cpp", {
  name: "Lokales llama.cpp",
  baseUrl: "http://localhost:8080/v1",
  apiKey: "local",
  api: "openai-completions",
  // Geladene Modelle dynamisch ermitteln
  async refreshModels({ signal }) {
    const response = await fetch(
      "http://localhost:8080/v1/models",
      { signal }
    );
    const { data } = await response.json();
    return data.map(({ id }) => ({
      id,
      name: id,
      reasoning: false,
      input: ["text"],
      Kosten: {
        input: 0,
        output: 0,
        cacheRead: 0,
        cacheWrite: 0,
      },
      contextWindow: 128000,
      maxTokens: 16384,
    }));
  },
});

Dieser dynamische Erkennungsmodus ermöglicht es Pi Agent, die Liste der aktuell geladenen Modelle auf dem llama.cpp-Server in Echtzeit abzurufen.

Speichern Sie die Datei im Verzeichnis ~/.pi/agent/extensions/ und starten Sie Pi Agent neu; die Erweiterung wird automatisch geladen und registriert diesen Anbieter.

Öffnen Sie nach der Aktivierung den /model-Selektor, um die aktuell auf dem llama.cpp-Server geladenen Modelle zu sehen und direkt mit ihnen zu chatten.


Einschränkungen lokaler Modelle

Beachten Sie bei der Verwendung lokaler Modelle Folgendes:

  • Tool-Calling-Fähigkeit: Einige Open-Source-Modelle haben eine schwache Tool-Calling-Fähigkeit und können die integrierten Tools von Pi Agent möglicherweise nicht korrekt verwenden
  • Inferenzgeschwindigkeit: Ohne GPU-Beschleunigung kann die Inferenzgeschwindigkeit langsamer sein.
  • Kontextlänge: Das effektive Kontextfenster lokaler Modelle ist normalerweise kleiner als das von Cloud-Modellen.
  • Reasoning-Level: Nicht-Reasoning-Modelle laufen immer als off und können die Funktion für das Reasoning-Level nicht nutzen.

Wenn die Tool-Calling-Fähigkeit schwach ist, ist das häufigste Symptom, dass das Modell den Tool-Aufruf als Text ausgibt, anstatt das Tool tatsächlich auszulösen.

> 查看 src/index.ts 的内容

好的,下面是 src/index.ts 的内容:
import { createAgent } from "pi";
export const agent = createAgent();
...

Wenn im Nachrichtenbereich keine Tool-Calling-Karte erscheint, bedeutet das, dass das Modell das read-Tool nicht tatsächlich aufgerufen, sondern Dateiinhalte erfunden hat.

In diesem Fall können Sie zu einem Modell mit besserer Tool-Calling-Unterstützung wechseln oder die Aufgabe in kleinere Schritte aufteilen.

Bevorzugte Hybrid-Strategie: Verwenden Sie Cloud-Modelle (z. B. Claude Sonnet), wenn tiefgehendes Reasoning und komplexes Coding erforderlich sind, und wechseln Sie zu lokalen Modellen für einfache Routineaufgaben oder wenn das Netzwerk eingeschränkt ist.

Verwende Ctrl+P, um schnell zwischen zwei Modellen zu wechseln.

Weitere Erweiterungen