152 lines
7.7 KiB
Markdown
152 lines
7.7 KiB
Markdown
# Continue (VS Code) mit dem zentralen LocalAI-Server
|
||
|
||
Continue ist ein Open-Source-Plugin für VS Code (und JetBrains). Es bietet:
|
||
|
||
| Funktion | Wofür | Modell auf dem Server |
|
||
|---|---|---|
|
||
| **Chat / Agent** | Fragen zum Code, Agent-Modus mit Tools (Dateien lesen/schreiben, Terminal) | `qwen3.5-35b-a3b` (oder `glm-4.7-flash`, `qwen3.5-9b`) |
|
||
| **Edit / Apply** | markierten Code umschreiben lassen (`Ctrl+I`), Vorschläge übernehmen | wie Chat |
|
||
| **Autocomplete** | Ghost-Text-Vervollständigung beim Tippen (Tab) | `qwen2.5-coder-1.5b` (läuft dauerhaft) |
|
||
| **Embeddings** | `@codebase`-Suche über das ganze Projekt | `nomic-embed` (läuft dauerhaft, CPU) |
|
||
|
||
Alles läuft über die eine API `http://<server>:8800/v1` mit API-Key. Es geht nichts in die Cloud.
|
||
|
||
---
|
||
|
||
## 1. Voraussetzungen
|
||
|
||
- Der Server läuft (`docker compose ps` auf alegab-pc, siehe [README](../README.md)).
|
||
- Der Client-PC ist **im Heim-LAN (192.168.178.0/24)** oder **mit NetBird verbunden**. Andere Netze bekommen `403`.
|
||
- Du hast den **API-Key**: Das ist `LLM_API_KEY` aus `.env` auf dem Server.
|
||
```bash
|
||
grep ^LLM_API_KEY ~/workspace/localAI/.env
|
||
```
|
||
|
||
Verbindungstest vom Client aus:
|
||
```bash
|
||
curl -H "Authorization: Bearer <KEY>" http://192.168.178.72:8800/v1/models
|
||
# NetBird: http://100.73.82.219:8800/v1/models
|
||
```
|
||
Kommt eine JSON-Liste mit den Modellen zurück, steht die Verbindung.
|
||
|
||
## 2. Extension installieren
|
||
|
||
- **VS Code:** Extensions (`Ctrl+Shift+X`) öffnen, nach **„Continue"** suchen (Herausgeber: Continue) und installieren.
|
||
Alternativ auf der Kommandozeile: `code --install-extension Continue.continue`
|
||
- **VSCodium / Code-OSS:** gleicher Name, die Extension kommt dort aus Open VSX.
|
||
|
||
Beim ersten Start zeigt Continue eine Anmeldeseite für den „Continue Hub". **Melde dich nicht an.** Wähle stattdessen *„Or, configure your own models"* bzw. *„Skip"* oder *„Local config"*. Damit bleibt alles lokal.
|
||
|
||
## 3. Konfiguration einspielen
|
||
|
||
Continue liest die lokale Konfiguration aus:
|
||
|
||
| System | Pfad |
|
||
|---|---|
|
||
| Linux / macOS | `~/.continue/config.yaml` und `~/.continue/.env` |
|
||
| Windows | `%USERPROFILE%\.continue\config.yaml` und `%USERPROFILE%\.continue\.env` |
|
||
|
||
**Linux/macOS:**
|
||
```bash
|
||
mkdir -p ~/.continue
|
||
cp ~/.continue/config.yaml ~/.continue/config.yaml.bak 2>/dev/null # Backup, falls vorhanden
|
||
cp client/continue/config.yaml ~/.continue/config.yaml
|
||
cp client/continue/.env.example ~/.continue/.env
|
||
chmod 600 ~/.continue/.env
|
||
$EDITOR ~/.continue/.env # LOCALAI_API_KEY=<KEY> eintragen
|
||
```
|
||
|
||
**Windows (PowerShell):**
|
||
```powershell
|
||
New-Item -ItemType Directory -Force $env:USERPROFILE\.continue
|
||
Copy-Item client\continue\config.yaml $env:USERPROFILE\.continue\config.yaml
|
||
Copy-Item client\continue\.env.example $env:USERPROFILE\.continue\.env
|
||
notepad $env:USERPROFILE\.continue\.env
|
||
```
|
||
|
||
Die Dateien `config.yaml` und `.env.example` liegen in diesem Repo unter [`client/continue/`](../client/continue/). Auf einen anderen PC kopierst du sie per USB-Stick, scp oder Git.
|
||
|
||
## 4. Server-Adresse eintragen
|
||
|
||
Oben in `config.yaml` gibt es den Block `model_defaults:`. Dort steht **eine** `apiBase`, die für alle Modelle gilt:
|
||
|
||
```yaml
|
||
model_defaults: &localai
|
||
provider: openai
|
||
apiBase: http://192.168.178.72:8800/v1 # ← hier anpassen
|
||
apiKey: ${{ secrets.LOCALAI_API_KEY }}
|
||
```
|
||
|
||
| Standort des Client-PCs | `apiBase` |
|
||
|---|---|
|
||
| auf alegab-pc selbst | `http://127.0.0.1:8800/v1` |
|
||
| im Heim-LAN | `http://192.168.178.72:8800/v1` |
|
||
| unterwegs über NetBird | `http://100.73.82.219:8800/v1` oder `http://<netbird-name>.netbird.cloud:8800/v1` |
|
||
|
||
> **Tipp für Laptops**, die mal im LAN und mal unterwegs sind: Nimm immer die **NetBird-Adresse**. Sie funktioniert auch zu Hause, solange NetBird verbunden ist. Dann musst du nie umschalten.
|
||
|
||
Den NetBird-Namen und die NetBird-IP des Servers zeigt `netbird status -d` auf alegab-pc an.
|
||
|
||
Nach dem Speichern lädt Continue die Konfiguration automatisch neu. Falls nicht: Command Palette (`Ctrl+Shift+P`) → *„Continue: Reload"* oder VS Code neu laden.
|
||
|
||
## 5. Telemetrie abschalten
|
||
|
||
Continue sendet standardmäßig anonyme Nutzungsstatistiken. So schaltest du das ab:
|
||
|
||
VS Code-Einstellungen (`Ctrl+,`) → nach `continue telemetry` suchen → **„Continue: Telemetry Enabled"** abhaken.
|
||
Oder direkt in `settings.json`:
|
||
```json
|
||
"continue.telemetryEnabled": false
|
||
```
|
||
|
||
## 6. Benutzung
|
||
|
||
| Aktion | Tastenkürzel (Standard) |
|
||
|---|---|
|
||
| Continue-Seitenleiste öffnen / Chat | `Ctrl+L` (markierten Code mitnehmen) |
|
||
| Code inline bearbeiten (Edit) | Code markieren → `Ctrl+I` |
|
||
| Autocomplete annehmen | `Tab` (Wort für Wort: `Ctrl+→`) |
|
||
| Autocomplete ablehnen | `Esc` |
|
||
| Modell wechseln | Dropdown unten in der Chat-Box |
|
||
| Modus wechseln (Chat / Plan / Agent) | Dropdown links unten in der Chat-Box |
|
||
|
||
**Kontext mit `@`** im Chat: `@codebase` (semantische Suche im Projekt), `@file`, `@folder`, `@diff` (aktuelle Git-Änderungen), `@terminal`, `@problems`.
|
||
|
||
### Hinweise zu den Modellen
|
||
- **Erster Request nach längerer Pause:** Das Chat-Modell wird in den VRAM geladen, das dauert 10–60 s. Danach bleibt es 1 h geladen.
|
||
- **Modellwechsel** zwischen den Chat-Modellen dauert ebenso. Am besten bei einem Modell bleiben.
|
||
- Das **Autocomplete-** und das **Embedding-Modell** laufen dauerhaft und werden durch den Chat nie entladen.
|
||
- Der Server ist **ein gemeinsames System**. Wenn mehrere Leute gleichzeitig chatten, werden die Anfragen nacheinander abgearbeitet. Wer ein *anderes* Chat-Modell wählt, löst bei allen einen Modellwechsel aus.
|
||
- **Agent-Modus**: Gib kleine, klar umrissene Aufgaben. Lokale Modelle verlieren bei langen Mehrschritt-Aufträgen eher den Faden als Cloud-Modelle.
|
||
|
||
## 7. Fehlersuche
|
||
|
||
| Symptom | Ursache / Lösung |
|
||
|---|---|
|
||
| `401 unauthorized` | API-Key fehlt oder ist falsch. `~/.continue/.env` prüfen (kein Leerzeichen, keine Anführungszeichen). |
|
||
| `403 forbidden` | Der Client ist in einem nicht erlaubten Netz. LAN oder NetBird verbinden. |
|
||
| Timeout / „connection refused" | Falsche `apiBase`, Server aus oder Firewall. `curl`-Test aus Abschnitt 1 ausprobieren. |
|
||
| Erste Antwort dauert lange | Das Modell wird geladen, beim allerersten Mal sogar heruntergeladen. Abwarten. |
|
||
| Autocomplete zeigt nichts | Unten rechts in der Statusleiste muss „Continue" aktiv sein (Klick → *Enable autocomplete*). Im Output-Panel *„Continue"* nach Fehlern schauen. Das Template in `config.yaml` (`promptTemplates.autocomplete`) muss unverändert sein. |
|
||
| Autocomplete liefert Müll / Chat-Text | Für Autocomplete muss das Modell `qwen2.5-coder-1.5b` mit `useLegacyCompletionsEndpoint: true` eingestellt sein, kein Chat-Modell. |
|
||
| Agent ruft keine Tools auf | Das Modell braucht `capabilities: [tool_use]`. `qwen3.5-35b-a3b` oder `glm-4.7-flash` nehmen. |
|
||
| `@codebase` findet nichts | Indexierung läuft noch, siehe Fortschritt in der Continue-Seitenleiste. Neu anstoßen: Command Palette (`Ctrl+Shift+P`) → „Continue" eintippen → den Befehl zum Neu-Indexieren (*Re-Index* / *Rebuild codebase index*) wählen. |
|
||
|
||
Logs des Servers (auf alegab-pc):
|
||
```bash
|
||
cd ~/workspace/localAI
|
||
docker compose logs -f llama-swap # Modell-Laden, Requests
|
||
docker compose logs -f caddy # Zugriffe, 401/403
|
||
```
|
||
|
||
## 8. Fertige Varianten
|
||
|
||
### a) Nur ein Modell, minimal
|
||
Wenn du nur Chat und Autocomplete willst, lösche in `config.yaml` die Einträge `GLM-4.7 Flash`, `Qwen3.5 9B` und `Nomic Embed`.
|
||
|
||
### b) Schwacher Client, schnelle Antworten
|
||
Nimm `Qwen3.5 9B (schnell)` als Chat-Modell. Es liegt komplett im VRAM und antwortet deutlich schneller, ist aber weniger klug.
|
||
|
||
### c) Projektbezogene Konfiguration
|
||
Continue liest zusätzlich `.continue/`-Ordner im Projekt. Dort kannst du z. B. projektspezifische Regeln ablegen (`.continue/rules/*.md`) und sie mit ins Repo einchecken. Die Modelle bleiben in der globalen `~/.continue/config.yaml`.
|