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.
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:
| Modell | Parameters | Minimaler VRAM/RAM | Anwendungsfälle |
|---|---|---|---|
| Qwen 2.5 Coder | 7B / 14B / 32B | 8G / 16G / 32G | Allgemeine Programmierung, mehrsprachig |
| DeepSeek Coder V2 | 16B / 236B | 16G / 128G+ | Komplexe Programmieraufgaben |
| CodeLlama | 7B / 13B / 34B | 8G / 16G / 32G | Codevervollständigung, allgemeine Programmierung |
| Mistral | 7B | 8G | Leichtgewichtiger 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
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.
Weitere ErweiterungenBevorzugte 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.