Skip to main content
Select language: current language is German
Suchen oder Fragen an Copilot stellen
Menü öffnen

Einrichten des Copilot SDK für Back-End-Dienste

Führen Sie GitHub Copilot SDK in serverseitigen Anwendungen wie APIs, Web-Back-Ends, Microservices und Hintergrundmitarbeitern aus.

Wer kann dieses Feature verwenden?

GitHub Copilot SDK ist mit allen Copilot Tarifen verfügbar.

Hinweis

          Copilot SDK ist zurzeit in Technische Preview. Funktionalität und Verfügbarkeit können geändert werden.

Die CLI läuft als Headless-Server, mit dem sich Ihr Back-End-Code über das Netzwerk verbindet.

          **Am besten geeignet für:** Web-App-Back-Ends, API-Dienste, interne Tools, CI/CD-Integrationen, jede serverseitige Workload.

So funktioniert es

Anstelle dass das SDK einen CLI-Unterprozess erzeugt, führen Sie die CLI unabhängig im Headless-Servermodus aus. Ihr Backend verbindet sich mithilfe der cliUrl Option über TCP. Ausführliche Diagramme der Headless-Serverarchitektur und wie sie mit der standardmäßigen automatisch verwalteten CLI verglichen werden, finden Sie im github/copilot-sdkRepository.

Wichtige Merkmale:

  • Die CLI wird als beständiger Serverprozess ausgeführt, nicht pro Anforderung spawniert.
  • Das SDK stellt eine Verbindung über TCP her– die CLI und die App können in verschiedenen Containern ausgeführt werden.
  • Mehrere SDK-Clients können einen CLI-Server gemeinsam nutzen.
  • Funktioniert mit jeder Authentifizierungsmethode (GitHub Token, Umgebungsvariablen, BYOK).

Schritt 1: Starten der CLI im kopflosen Modus

Führen Sie die CLI als Hintergrundserver aus.

# Start with a specific port
copilot --headless --port 4321

# Or let it pick a random port (prints the URL)
copilot --headless
# Output: Listening on http://localhost:52431

Führen Sie es in der Produktion als Systemdienst oder in einem Container aus:

# Docker
docker run -d --name copilot-cli \
    -p 4321:4321 \
    -e COPILOT_GITHUB_TOKEN="$TOKEN" \
    ghcr.io/github/copilot-cli:latest \
    --headless --port 4321
# systemd
[Service]
ExecStart=/usr/local/bin/copilot --headless --port 4321
Environment=COPILOT_GITHUB_TOKEN=YOUR-GITHUB-TOKEN
Restart=always

Schritt 2: Verbinden des SDK

Node.js / TypeScript

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({
    cliUrl: "localhost:4321",
});

const session = await client.createSession({
    sessionId: `user-${userId}-${Date.now()}`,
    model: "gpt-4.1",
});

const response = await session.sendAndWait({ prompt: req.body.message });
res.json({ content: response?.data.content });

Python

from copilot import CopilotClient

client = CopilotClient({
    "cli_url": "localhost:4321",
})
await client.start()

session = await client.create_session({
    "session_id": f"user-{user_id}-{int(time.time())}",
    "model": "gpt-4.1",
})

response = await session.send_and_wait({"prompt": message})

Los geht's

client := copilot.NewClient(&copilot.ClientOptions{
    CLIUrl: "localhost:4321",
})
client.Start(ctx)
defer client.Stop()

session, _ := client.CreateSession(ctx, &copilot.SessionConfig{
    SessionID: fmt.Sprintf("user-%s-%d", userID, time.Now().Unix()),
    Model:     "gpt-4.1",
})

response, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: message})

.NET

var client = new CopilotClient(new CopilotClientOptions
{
    CliUrl = "localhost:4321",
    UseStdio = false,
});

await using var session = await client.CreateSessionAsync(new SessionConfig
{
    SessionId = $"user-{userId}-{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}",
    Model = "gpt-4.1",
});

var response = await session.SendAndWaitAsync(
    new MessageOptions { Prompt = message });

Authentifizierung für Back-End-Dienste

Umgebungsvariablen-Token

Der einfachste Ansatz: Legen Sie ein Token auf dem CLI-Server fest:

# All requests use this token
export COPILOT_GITHUB_TOKEN="YOUR-SERVICE-ACCOUNT-TOKEN"
copilot --headless --port 4321

Ersetzen Sie YOUR-SERVICE-ACCOUNT-TOKEN durch Ihr GitHubpersonal access token oder OAuth-Token für das Dienstkonto.

Benutzerbasierte Token (OAuth)

Übergeben Sie einzelne Benutzertoken beim Erstellen von Sitzungen:

// Your API receives user tokens from your auth layer
app.post("/chat", authMiddleware, async (req, res) => {
    const client = new CopilotClient({
        cliUrl: "localhost:4321",
        githubToken: req.user.githubToken,
        useLoggedInUser: false,
    });

    const session = await client.createSession({
        sessionId: `user-${req.user.id}-chat`,
        model: "gpt-4.1",
    });

    const response = await session.sendAndWait({
        prompt: req.body.message,
    });

    res.json({ content: response?.data.content });
});

BYOK (keine GitHub Authentifizierung)

Verwenden Sie Ihre eigenen API-Schlüssel für den Modellanbieter:

const client = new CopilotClient({
    cliUrl: "localhost:4321",
});

const session = await client.createSession({
    model: "gpt-4.1",
    provider: {
        type: "openai",
        baseUrl: "https://api.openai.com/v1",
        apiKey: process.env.OPENAI_API_KEY,
    },
});

Allgemeine Back-End-Muster

Web-API mit Express

import express from "express";
import { CopilotClient } from "@github/copilot-sdk";

const app = express();
app.use(express.json());

// Single shared CLI connection
const client = new CopilotClient({
    cliUrl: process.env.CLI_URL || "localhost:4321",
});

app.post("/api/chat", async (req, res) => {
    const { sessionId, message } = req.body;

    // Create or resume session
    let session;
    try {
        session = await client.resumeSession(sessionId);
    } catch {
        session = await client.createSession({
            sessionId,
            model: "gpt-4.1",
        });
    }

    const response = await session.sendAndWait({ prompt: message });
    res.json({
        sessionId,
        content: response?.data.content,
    });
});

app.listen(3000);

Hintergrundmitarbeiter

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({
    cliUrl: process.env.CLI_URL || "localhost:4321",
});

// Process jobs from a queue
async function processJob(job: Job) {
    const session = await client.createSession({
        sessionId: `job-${job.id}`,
        model: "gpt-4.1",
    });

    const response = await session.sendAndWait({
        prompt: job.prompt,
    });

    await saveResult(job.id, response?.data.content);
    await session.disconnect(); // Clean up after job completes
}

Docker Compose-Bereitstellung

version: "3.8"

services:
  copilot-cli:
    image: ghcr.io/github/copilot-cli:latest
    command: ["--headless", "--port", "4321"]
    environment:
      - COPILOT_GITHUB_TOKEN=${COPILOT_GITHUB_TOKEN}
    ports:
      - "4321:4321"
    restart: always
    volumes:
      - session-data:/root/.copilot/session-state

  api:
    build: .
    environment:
      - CLI_URL=copilot-cli:4321
    depends_on:
      - copilot-cli
    ports:
      - "3000:3000"

volumes:
  session-data:

Gesundheitschecks

Überwachen Sie den Zustand des CLI-Servers:

// Periodic health check
async function checkCLIHealth(): Promise<boolean> {
    try {
        const status = await client.getStatus();
        return status !== undefined;
    } catch {
        return false;
    }
}

Sitzungsbereinigung

Back-End-Dienste sollten Sitzungen aktiv bereinigen, um Ressourcenlecks zu vermeiden:

// Clean up expired sessions periodically
async function cleanupSessions(maxAgeMs: number) {
    const sessions = await client.listSessions();
    const now = Date.now();

    for (const session of sessions) {
        const age = now - new Date(session.createdAt).getTime();
        if (age > maxAgeMs) {
            await client.deleteSession(session.sessionId);
        }
    }
}

// Run every hour
setInterval(() => cleanupSessions(24 * 60 * 60 * 1000), 60 * 60 * 1000);

Einschränkungen

EinschränkungEinzelheiten
          **Einzelner CLI-Server = Einzelner Fehlerpunkt** | Berücksichtigen Sie Hochverfügbarkeitsmuster für Produktionsbereitstellungen. |

| Keine integrierte Authentifizierung zwischen SDK und CLI | Sichern Sie den Netzwerkpfad (desselben Hosts, VPC, usw.). | | Sitzungszustand auf dem lokalen Datenträger | Einrichten des beständigen Speichers für Containerneustarts. | | Leerlauf-Timeout von 30 Minuten | Sitzungen ohne Aktivität werden automatisch bereinigt. |

Nächste Schritte

  • Informationen zur Installation und ihrer ersten Nachricht finden Sie unter Erste Schritte mit dem Copilot SDK.
  • Informationen zum Fortsetzen von Sitzungen über Neustarts hinweg finden Sie unter "Sitzungspersistenz " im github/copilot-sdk Repository.
  • Informationen zum Hinzufügen der Benutzerauthentifizierung finden Sie unter GitHub OAuth im github/copilot-sdk Repository.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.