ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Der Open-Source-KI-Code-Editor

Visual Studio Code herunterladen

Durch die Nutzung von VS Code stimmen Sie dessen Lizenz und Datenschutzerklärung zu.

Interaktive Heldenansicht, die die Benutzeroberfläche von Visual Studio Code mit Agent-Sitzungen, Beispiel-Tabs und Copilot-Chat zeigt; verwenden Sie die Navigation, um den Editorinhalt zu erkunden.
Agent-Sitzungen
Lokaler Chat-Agent Refactoring der MailList-Komponentenstruktur GitHub Copilot Cloud Agent MailListItem in eigenständige Komponente extrahieren 10 min #1
+42 -24
GitHub Copilot CLI Agent CLI-Agent-Sitzung starten
MailList.tsx MailListItem.tsx MailListItem in eigenständige Komponente extrahieren
import { For, createSignal, createMemo } from "solid-js";
import { useNavigate, useParams } from "@tanstack/solid-router";
import { getEmailsForMailbox } from "~/data/emails";
import { MailListItem } from "~/components/MailListItem";

export function MailList() {
  const params = useParams({ strict: false }) as {
    mailbox?: string;
    id?: string;
  };
  const navigate = useNavigate();
  const [query, setQuery] = createSignal("");
  const mailbox = () => params.mailbox || "inbox";
  const list = createMemo(() => {
    const q = query().toLowerCase();
    return getEmailsForMailbox(mailbox()).filter(
      (e) =>
        !q ||
        e.subject.toLowerCase().includes(q) ||
        e.snippet.toLowerCase().includes(q)
    );
  });
  function open(id: string) {
    navigate({
      to: "/mail/$mailbox/$id",
      params: { mailbox: mailbox(), id },
      search: (prev) => prev,
    });
  }

  return (
    <For each={list()}>
      {(e) => (
        <div
          role="listitem"
          tabindex={0}
          onClick={() => open(e.id)}
          onKeyDown={(ev) => ev.key === "Enter" && open(e.id)}
          class="mail-item"
          data-selected={params.id === e.id ? "true" : undefined}
          aria-selected={params.id === e.id ? "true" : undefined}
        >
          <div>
            <div class="mail-item-subject truncate">{e.subject}</div>
            <div class="mail-item-snippet truncate">{e.snippet}</div>
          </div>
          <time
            class="text-xs muted"
            datetime={e.date}
            title={new Date(e.date).toLocaleString()}
          >
            {new Date(e.date).toLocaleDateString(undefined, {
              month: "short",
              day: "numeric",
            })}
          </time>
        </div>
        <MailListItem
          email={e}
          isSelected={params.id === e.id}
          onOpen={open}
        />
      )}
    </For>
  );
}
Chat
Bitte aktualisieren Sie die MailList-Komponente, um E-Mail-Listen-Elemente in ihre eigene eigenständige Komponente zu abstrahieren GitHub Copilot Cloud Agent An Cloud-Agent delegieren Der Agent arbeitet asynchron, um einen Pull-Request mit Ihren gewünschten Änderungen zu erstellen. kenzi.lawson avatar kenzi.lawson"Delegieren" ausgewählt GitHub Copilot Cloud Agent [WIP] Refactor MailList, um E-Mail-Listen-Elemente zu abstrahieren - Copilot Der Cloud-Agent hat mit der Arbeit an "Bitte aktualisieren Sie die Ma..." begonnen und wird diesen Pull-Request aktualisieren, sobald die Arbeit fortschreitet. Bitte aktualisieren Sie die MailList-Komponente, um einzelne E-Mail-Listen-Elemente in ihre eigene Komponente zu extrahieren Erstellt aus VS Code über die GitHub Pull Request-Erweiterung. ✨ Lassen Sie Copilot Coding Agent die Einrichtung für Sie vornehmen - der Coding Agent arbeitet schneller und leistet qualitativ hochwertigere Arbeit, wenn er für Ihr Repository eingerichtet ist. Der GitHub Copilot Cloud-Agent hat mit der Bearbeitung Ihrer Anfrage begonnen. Verfolgen Sie seinen Fortschritt im zugehörigen Chat und Pull-Request. MailList.tsx
Beschreiben Sie, was als nächstes erstellt werden soll
Agent GPT-5

Jedes Modell für jedes Team

Wählen Sie aus mehreren sofort einsatzbereiten Modellen oder bringen Sie Ihren eigenen Schlüssel mit, um auf Modelle Ihres bevorzugten Modell- und Hosting-Anbieters zuzugreifen.

Agent GPT-5
Auto Variable GPT-5 mini 0x Claude Opus 4.5 (Vorschau) 1x Claude Sonnet 4.5 1x Gemini 3 Pro (Vorschau) 1x GPT-5 1x GPT-5.1-Codex (Vorschau) 1x GPT-5.1-Codex-Max (Vorschau) 1x Modelle verwalten...

Ein Experte für Ihren Code

Ihr Code wird lokal und remote indiziert, um zu verstehen, was relevant ist, und ermöglicht schnelle, kontextbezogene Interaktionen.

main.rs
Wo ist die Datenbankverbindungszeichenfolge im Code als konfiguriert?
Agent Claude Sonnet 4.5

KI, die so funktioniert, wie Ihr Team es tut

Personalisieren Sie Interaktionen mithilfe benutzerdefinierter Agenten, benutzerdefinierter Anweisungen und wiederverwendbarer Prompt-Dateien, die auf Ihre Workflows und Tools zugeschnitten sind.

Interaktives VS Code Editor-Mockup mit Prompt-Dateien in Tabs; verwenden Sie Standard-Tastaturnavigation, um die Tab-Leiste und den Editorinhalt zu erkunden.
Compact.chatmode.md AGENTS.md docs.instructions.md
---
                        description: 'Generate compact responses, focusing on brevity and clarity.'
                        tools: ['search', 'fetch', 'githubRepo', 'usages', 'vscodeAPI', 'problems', 'changes', 'testFailure', 'todos']
                        ---
                        You are a chat mode that provides extremely concise and clear responses. 
                        Your replies should be brief, to the point, and free of unnecessary details. 
                        Focus on delivering the essential information in a straightforward manner.
                        When responding, you must adhere to the following guidelines:
                        - Use short sentences and simple language.
                        - Prioritize clarity over completeness.
                        - Do not provide explanations or justifications unless explicitly asked.
                        - Do not provide any updates as you are working on the task –– only respond when the task is complete.
                        

KI-Funktionen in VS Code kostenlos nutzen

Keine Testversion. Keine Kreditkarte erforderlich. Nur Ihr GitHub-Konto.

Kostenlos testen

Agent-Modus

Bewältigen Sie komplexe, mehrstufige Aufgaben. Der Agent-Modus liest Ihren Code, schlägt Änderungen in mehreren Dateien vor, führt Terminalbefehle aus und reagiert auf Kompilierungs- oder Testfehler – alles in einer Schleife, bis die Aufgabe erledigt ist. Verfeinern Sie den Agent-Modus weiter, um ihn mit VS Code-Erweiterungen und Model Context Protocol (MCP)-Servern an die Workflows Ihres Teams anzupassen.

Mit Agent-Modus erstellen
Interaktiver Agent-Modus-Walkthrough mit VS Code-Tabs, Seitenleisten und Chat-Interaktionen; verwenden Sie Standard-Tastaturnavigation, um jeden Bereich zu erkunden.
batch.go processor.go image_processor_test.go health.go main.go
package http

import (
    "io"
    "log/slog"
    "mime/multipart"
    "net/http"
    "strings"
)

type BatchItemResult struct {
    Name string `json:"name"`
    Metadata *struct {
        Format string `json:"format"`
        Width  int    `json:"width"`
        Height int    `json:"height"`
        Bytes  int    `json:"bytes"`
    } `json:"metadata,omitempty"`
    Error string `json:"error,omitempty"`
}

type BatchResponse struct {
    Results []*BatchItemResult `json:"results"`
    Count   int                `json:"count"`
    Success int                `json:"success"`
    Failed  int                `json:"failed"`
}

// handleProcessBatch processes multiple uploaded images (multipart/form-data) under the field name "files".
// It returns metadata for each image or an error per item without failing the whole batch unless the request is malformed.
func (s *Server) handleProcessBatch(w http.ResponseWriter, r *http.Request) {
    // Enforce max body size overall.
    r.Body = http.MaxBytesReader(w, r.Body, s.cfg.MaxUploadBytes)
    if ct := r.Header.Get("Content-Type"); !strings.HasPrefix(ct, "multipart/form-data") {
        s.writeJSON(w, http.StatusBadRequest, map[string]string{"error": "content type must be multipart/form-data"})
        return
    }
    if err := r.ParseMultipartForm(s.cfg.MaxUploadBytes); err != nil {
        status := http.StatusBadRequest
        if strings.Contains(err.Error(), "request body too large") {
            status = http.StatusRequestEntityTooLarge
        }
        s.writeJSON(w, status, map[string]string{"error": "invalid multipart form: " + err.Error()})
        return
    }

    // Accept files under the key "files". If absent, attempt to fallback to any file parts.
    var fileHeaders []*multipart.FileHeader
    if r.MultipartForm != nil && len(r.MultipartForm.File["files"]) > 0 {
        fileHeaders = r.MultipartForm.File["files"]
    } else if r.MultipartForm != nil {
        // Fallback: gather all files across keys.
        for _, fhs := range r.MultipartForm.File {
            fileHeaders = append(fileHeaders, fhs...)
        }
    }

    if len(fileHeaders) == 0 {
        s.writeJSON(w, http.StatusBadRequest, map[string]string{"error": "no files provided (expect key 'files')"})
        return
    }

    resp := &BatchResponse{Results: make([]*BatchItemResult, 0, len(fileHeaders))}

    for _, fh := range fileHeaders {
        item := &BatchItemResult{Name: fh.Filename}
        f, err := fh.Open()
        if err != nil {
            item.Error = "open file: " + err.Error()
            resp.Results = append(resp.Results, item)
            resp.Failed++
            continue
        }
        data, err := io.ReadAll(f)
        _ = f.Close()
        if err != nil {
            item.Error = "read file: " + err.Error()
            resp.Results = append(resp.Results, item)
            resp.Failed++
            continue
        }
        meta, err := s.proc.ExtractMetadata(data)
        if err != nil {
            item.Error = err.Error()
            resp.Results = append(resp.Results, item)
            resp.Failed++
            continue
        }
        // Copy into anonymous struct to decouple from internal type if it changes.
        item.Metadata = &struct {
            Format string `json:"format"`
            Width  int    `json:"width"`
            Height int    `json:"height"`
            Bytes  int    `json:"bytes"`
        }{Format: meta.Format, Width: meta.Width, Height: meta.Height, Bytes: meta.Bytes}
        resp.Results = append(resp.Results, item)
        resp.Success++
    }

    resp.Count = len(resp.Results)
    s.log.LogAttrs(r.Context(), slog.LevelInfo, "batch processed", slog.Int("count", resp.Count), slog.Int("success", resp.Success), slog.Int("failed", resp.Failed))
    s.writeJSON(w, http.StatusOK, resp)
}
Copilot Claude Code Claude Code Codex Codex Cline Cline Gemini Gemini Chat
Ich baue einen Bildverarbeitungsservice. Können Sie bitte einen neuen Endpunkt erstellen, der Unterstützung für die Stapelbildverarbeitung implementiert?
Erstellen einer To-Do-Liste Ich beginne mit der Erstellung der To-Do-Liste und verwalte Aufgaben wie das Lesen des vorhandenen Server- und Prozessors-Codes, das Entwerfen des Batch-Endpunktvertrags und die Implementierung einer neuen Datei mit einem Handler. Ich möchte den Handler in die Server-Routen einbinden und vielleicht einen minimalen Test für den Batch-Endpunkt hinzufügen, auch wenn das optional ist. Außerdem plane ich, die Tests auszuführen und alles danach zu kompilieren. Los geht's!
Erstellung einer strukturierten To-Do-Liste zur Implementierung des Batch-Bildverarbeitungs-Endpunkts. 7 Todos erstellt Kern-Dateien lesen, um die aktuelle Server- und Bildverarbeitungs-Implementierung zu verstehen, bevor der Batch-Endpunkt hinzugefügt wird. Lesenserver.go Lesenprocessor.go Lesenlogging.go Lesenhealth.go
Datei-Verarbeitung verbessern... Ich könnte server.go ändern, aber sie haben um eine neue Datei gebeten. Daher muss ich eine Route erstellen, nennen wir sie /process/batch. Ich werde eine maximale Body-Größe erzwingen und sicherstellen, dass der Content-Type multipart/form-data ist. Als nächstes werde ich das Formular parsen und über form.File["files"] iterieren. Für jeden FileHeader werde ich ihn öffnen und die Bytes lesen, dann ExtractMetadata aufrufen, um Ergebnisse zu sammeln. Schließlich werde ich eine strukturierte JSON-Antwort mit den Ergebnissen zurückgeben und Edge Cases für keine Dateien und maximale Batch-Limits behandeln. Ich denke, es ist vielleicht nicht absolut notwendig, aber ich erwäge eine kleine Verbesserung, indem ich sync.WaitGroup verwende, um jede Datei sequentiell zu verarbeiten und gleichzeitig die Nebenläufigkeit zu begrenzen. Das würde den ersten Commit vereinfachen. Ich muss die Code-Datei hinzufügen und den internen/bildbezogenen Alias importieren. Als nächstes werde ich die vorhandenen Tests in tests/image_processor_test.go überprüfen, um den Stil zu verstehen und zu entscheiden, ob ich eine neue Testdatei für den Batch-Handler erstellen soll. Ich werde das durchlesen und dann die To-Do-Status aktualisieren und die Aufgaben eins und zwei als abgeschlossen markieren.
Vorhandenen Test lesen, um den Stil zu spiegeln, bevor der Batch-Endpunkt hinzugefügt wird, und dann mit Design und Implementierung fortfahren. Lesenimage_processor_test.go
Vorbereitung auf den HTTP-Test Ich muss einen HTTP-Test ausführen, aber ich stelle fest, dass das aktuelle Testpaket in 'tests' und nicht in den Hauptmodulen liegt. Um den HTTP-Test durchzuführen, muss ich einige Dinge einrichten, wie die Konfiguration, den Prozessor, den Logger und den Server, plus eine Multipart-Anfrage senden. Mein nächster Schritt ist, die Konfiguration in config.go zu überprüfen, um zu verstehen, welche erforderlichen Felder ich angeben muss. Tauchen wir ein!
Konfiguration lesen, um den Server im HTTP-Test zu erstellen. Lesenconfig.go
Updates und Patches verwalten Ich muss die manage_todo_list verwenden, um alles organisiert zu halten und sicherzustellen, dass ich keine Aufgabe verliere. Sobald das erledigt ist, kann ich mit dem Anwenden des Patches fortfahren. Es wird das Hinzufügen einer neuen Datei und Änderungen an server.go beinhalten. Ich möchte sicherstellen, dass alles während dieses Prozesses klar und genau ist, um Fehler zu vermeiden. Machen wir weiter!
Start (3/7) Batch-Vertrag entwerfen
Updates und Tests implementieren Ich markiere den Design-Vertrag als abgeschlossen und muss dann die Updates implementieren. Ich werde die To-Do-Liste weiter verwalten und den Patch anwenden, um eine Datei hinzuzufügen und server.go zu aktualisieren. Es scheint, dass ich eine Route für /process/batch in server.go hinzufügen und eine neue Datei internal/http/batch.go implementieren muss. Nachdem ich den Code geschrieben habe, füge ich eine Testdatei hinzu, führe die Tests mit go test aus und verwende run_in_terminal-Befehle. Los geht's!
Abgeschlossen (3/7) Batch-Vertrag entwerfen Patch zum Hinzufügen von Batch-Handler und Route plus Test anwenden. server.go+1 -0 batch.go+106 -0 batch_endpoint_test.go+123 -0 Einen neuen Endpunkt für die Stapelbildverarbeitung implementiert Geänderte / Hinzugefügte Dateien
  • server.go: Neue Route POST /process/batch registriert.
  • batch.go: Neuer Handler handleProcessBatch, der
    • multipart/form-data akzeptiert.
    • Liest mehrere Dateien unter dem Schlüssel files (fällt auf beliebige Dateiteile zurück, wenn Dateien fehlen).
    • Gibt pro Datei Erfolg/Fehler zurück, ohne den gesamten Batch zu verwerfen.
    • Aggregiert Zählungen: count, success, failed.
  • batch_endpoint_test.go: Testet den Happy Path (1 gültige + 1 ungültige Datei) und den Fehlerfall bei fehlenden Dateien.
Vorgeschlagene nächste Schritte (optional)
  • Eine konfigurierbare maximale Anzahl von Dateien pro Batch hinzufügen (z. B. über die Konfiguration).
  • Streaming-Verarbeitung mit begrenztem Speicher (verarbeiten + verwerfen) für sehr große Bilder.
  • Optionale Parallelität mit einem Worker-Pool und Kontextabbruch.
  • Größenvalidierung pro Datei vor dem Dekodieren hinzufügen.
  • JSON-basierten Batch (URLs oder Base64) für Nicht-Multipart-Clients unterstützen.
Lassen Sie mich wissen, ob Sie eine dieser Verbesserungen wünschen oder ein anderes Format für Anfrage/Antwort bevorzugen.
batch.go
Beschreiben Sie, was als nächstes erstellt werden soll
Agent Gemini 3 Pro (Vorschau)

Vorschläge für die nächste Bearbeitung

VS Code prognostiziert Ihre nächsten Schritte während des Codierens. Verwenden Sie die Tabulatortaste, um KI-gestützte Vorschläge direkt in Ihrem Editor zu übernehmen. Es empfiehlt intelligent, was geändert werden soll - und wo - basierend auf den bereits vorgenommenen Bearbeitungen.

Mit KI-gestützten Vorschlägen codieren
main.py
import numpy as np
import pandas as pd

iris_data = pd.read_csv("iris_dataset.csv")

def describe(species: str) -> pd.Series:
7
subset = data[data["species"] == species]           subset = iris_data[iris_data["species"] == species] if subset.empty: raise ValueError(f"{species} missing from sample") return subset[["petal", "sepal"]].agg(["mean", "std"]).loc["mean"] def summary():
13
for species in np.sort(data["species"].unique()):      for species in np.sort(iris_data["species"].unique()): try: stats = describe(species) except ValueError: print(f"{species}: no records") continue print(f"{species}: petal={stats['petal']:.2f} sepal={stats['sepal']:.2f}") if __name__ == "__main__": summary()

In jeder Sprache codieren

VS Code unterstützt fast jede wichtige Programmiersprache. Mehrere sind im Lieferumfang enthalten, wie JavaScript, TypeScript, CSS und HTML, aber Erweiterungen für andere finden Sie im VS Code Marketplace.

JavaScript-SymbolJavaScript
TypeScript-SymbolTypeScript
Python-SymbolPython
C#-SymbolC#
C++-SymbolC++
HTML-SymbolHTML
Java-SymbolJava
JSON-SymbolJSON
PHP-SymbolPHP
Markdown-SymbolMarkdown
Powershell-SymbolPowershell
YAML-SymbolYAML

Vollständig anpassbar

Passen Sie Ihre VS Code-Oberfläche und Ihr Layout so an, dass sie Ihrem Programmierstil entsprechen.

Farbschemata ermöglichen es Ihnen, die Farben der Benutzeroberfläche von VS Code an Ihre Vorlieben und Arbeitsumgebung anzupassen.

Einstellungen synchronisieren ermöglicht es Ihnen, Ihre Benutzereinstellungen über Ihre VS Code-Instanzen hinweg mit der Funktion „Einstellungen synchronisieren“ zu teilen.

Profile ermöglichen es Ihnen, Sätze von Anpassungen zu erstellen und schnell zwischen ihnen zu wechseln oder sie mit anderen zu teilen.

Selecting the GitHub Dark theme with a quick pick Selecting the GitHub Dark theme with a quick pick

Überall codieren

Codieren Sie dort, wo Sie am produktivsten sind, egal ob Sie mit der Cloud, einem Remote-Repository oder im Browser mit VS Code für das Web (vscode.dev) verbunden sind.

Integriertes Quellcode-Management bietet Ihnen sofortige Git-Unterstützung. Viele andere Quellcode-Management-Anbieter sind über Erweiterungen verfügbar.

GitHub Codespaces bietet Cloud-basierte Entwicklungsumgebungen für jede Aktivität – sei es ein langfristiges Projekt oder eine kurzfristige Aufgabe wie die Überprüfung eines Pull-Requests.

vscode.dev in an Edge browser tab vscode.dev in an Edge browser tab

Mit reichhaltigen Funktionen codieren

Ein Editor kann mehr. Egal, ob Sie integrierte Funktionen oder umfangreiche Erweiterungen nutzen, es gibt etwas für jeden.

© . This site is unofficial and not affiliated with Microsoft.