Skip to main content
Skip to content

Copilot-Laufzeit im Prozess ausführen

Beim In-Process-Hosting wird die systemeigene Copilot Laufzeit in Ihren Anwendungsprozess geladen, anstatt einen separaten Copilot CLI-Prozess zu starten. Verwenden Sie dies, um auf die Verwaltung von Kindprozessen zu verzichten und dabei dieselben Copilot SDK-Sitzungen, Ereignisse, Tools, Hooks und das JSON-RPC-Verhalten beizubehalten.

Warnung

Das In-Process-Hosting ist in jedem SDK experimentell. Testen Sie das Start-, Modellwechsel- und Herunterfahrverhalten auf jedem Betriebssystem und jeder Architektur, die Sie bereitstellen.

Gründe für die Verwendung von In-Process-Hosting

Das In-Process-Hosting eignet sich gut, wenn:

  • Ihre Anwendung muss ohne einen separaten Laufzeitprozess ausgeführt werden.
  • Sie möchten, dass das SDK den Laufzeitlebenszyklus besitzt.
  • Sie können eine systemeigene Bibliothek für jede Bereitstellungsplattform versenden.
  • Prozessweite Umgebungs- und Arbeitsverzeichniseinstellungen sind akzeptabel.

Verwenden Sie autoTITLE , wenn die Prozessisolation und der etablierteste Bereitstellungspfad wichtiger sind. Verwenden Sie Einrichtung von Back-End-Diensten, wenn mehrere Anwendungsinstanzen sich über TCP mit einer gemeinsamen Laufzeit verbinden müssen.

So funktioniert es

Das SDK lädt die native Copilot-Laufzeitbibliothek und bindet deren feste C-ABI an. Alle SDK-Methoden verwenden weiterhin das vorhandene, mit Content-Length gerahmte JSON-RPC-Protokoll über eine In-Memory-Verbindung.

Diagramm: Flussdiagramm mit dem beschriebenen Prozess.

Die Laufzeit:

  • Wird im Anwendungsprozess ohne Node.js, einen untergeordneten Prozess, einen TCP-Port oder ein Verbindungstoken ausgeführt.
  • Unterstützt dieselben Sitzungen, Streamingereignisse, Tools, Hooks, Berechtigungen und Server-zu-Client-Anforderungen wie andere Transporte.
  • Kann SDK-Rückrufe aus nativen Arbeitsthreads aufrufen. Das SDK übernimmt das Thread-Marshalling und die Lebensdauer von Callbacks.
  • Hält die geladene native Bibliothek und deren Workerpool für die Lebensdauer des Anwendungsprozesses verfügbar.

SDK-Anforderungen

Alle SDKs machen eine explizite In-Process-Verbindungsoption verfügbar. Für einige Sprachen ist eine zusätzliche Build- oder Paketkonfiguration erforderlich.

SDKVerbindungsoptionZusätzliche Anforderung
TypeScriptRuntimeConnection.forInProcess()Keine, wenn das Paket ein kompatibles Laufzeitpaket enthält
PythonRuntimeConnection.for_inprocess()Vorabdownload mit python -m copilot download-runtime --in-process, wenn der Laufzeitdownload beim Start nicht verfügbar ist
Gocopilot.InProcessConnection{}Erstellen mit -tags copilot_inprocess
.NETRuntimeConnection.ForInProcess()Aktivieren der GHCP001 experimentellen API-Diagnose
RustTransport::InProcessAktivieren Sie die bundled-in-process Cargo-Funktion
JavaRuntimeConnection.forInProcess()Hinzufügen von JNA, einem Plattformlaufzeitklassifizierer und experimenteller API-Opt-In

Das native Laufzeitpaket muss mit dem Hostbetriebssystem, der CPU-Architektur sowie unter Linux auch mit der C-Bibliothek übereinstimmen. Nicht unterstützte Hosts schlagen während der Laufzeitauflösung oder beim Start fehl, anstatt auf einen untergeordneten Prozess zurückzukehren.

Eine prozessinterne Verbindung konfigurieren

Übergeben Sie die sprachspezifische Verbindungsoption, wenn Sie den Client erstellen.

Codesprachen navigation

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

const client = new CopilotClient({
  connection: RuntimeConnection.forInProcess(),
});

await client.start();

Sie können COPILOT_SDK_DEFAULT_CONNECTION=inprocess auch setzen, bevor Sie die Anwendung starten. Das SDK verwendet diesen Wert nur, wenn der Client keine explizite Verbindung angibt. Ein ungültiger Wert führt dazu, dass der Start fehlschlägt.

Bevorzugen Sie die explizite Clientkonfiguration im Anwendungscode. Verwenden Sie die Umgebungsvariable, wenn die Bereitstellungskonfiguration den Transport auswählen muss, ohne die Anwendung zu ändern.

Konfigurieren Sie die Runtime

Das SDK konvertiert unterstützte typierte Clientoptionen in systemeigene Laufzeitargumente und Hostbereichsumgebungswerte. Je nach SDK sind die folgenden Optionen enthalten:

  • Authentifizierungstoken und Fallback für angemeldete Benutzer.
  • Copilot Basisverzeichnis.
  • Protokollierungsstufe.
  • Leerlaufzeitlimit der Sitzung.
  • Modus für Remotesitzungen.

Die In-Process-Laufzeit erhält eine Momentaufnahme der Hostumgebung sowie unterstützte, vom SDK verwaltete Überschreibungen. Die Hostumgebung wird nicht verändert.

Legen Sie prozessweite Werte fest, bevor Sie den ersten In-Process-Client erstellen. Dazu gehören Umgebungsvariablen, die nicht durch eingegebene Clientoptionen und das aktuelle Arbeitsverzeichnis der Anwendung dargestellt werden.

Auflösung der Laufzeitbibliothek

Jedes SDK sucht zunächst nach einer kompatiblen gebündelten oder zwischengespeicherten Laufzeitbibliothek. Sie können COPILOT_CLI_PATH so festlegen, dass es auf ein kompatibles Copilot-Laufzeitpaket verweist, wenn Sie die Laufzeit separat bereitstellen müssen.

In einem Prozess kann normalerweise nur ein systemeigener Laufzeitbibliothekspfad und eine systemeigene Version geladen werden. Das Starten eines anderen Clients mit derselben geladenen Bibliothek wird unterstützt, der Versuch, eine andere Laufzeitbibliothek zu laden, schlägt jedoch fehl.

Für Produktionsumgebungen:

  1. Erstellen und testen Sie die Anwendung für jede Zielplattform.
  2. Stellen Sie sicher, dass das übereinstimmende systemeigene Laufzeitartefakt im bereitgestellten Paket enthalten ist oder über den Laufzeitdownloadmechanismus des SDK verfügbar ist.
  3. Starten Sie mindestens eine Sitzung und schließen Sie in einem Deployment-Smoke-Test mindestens einen Modelldurchlauf ab.
  4. Beenden Sie Clients ordnungsgemäß, bevor die Anwendung beendet wird.

Lebenszyklusverhalten

Beim Starten eines in-Process-Clients wird die systemeigene Bibliothek geladen, ein Laufzeithost erstellt, eine In-Memory-Verbindung geöffnet und der normale Handshake der SDK-Protokollversion ausgeführt.

Während des geordneten Herunterfahrens führt das SDK Folgendes aus:

  1. Schließt aktive Sitzungen.
  2. Fordert das normale Herunterfahren der Laufzeit über JSON-RPC an.
  3. Schließt die JSON-RPC- und systemeigenen Verbindungen.
  4. Gibt den Laufzeithost frei.

Die systemeigene Bibliothek kann bis zum Beenden des Anwendungsprozesses geladen werden. Verlassen Sie sich nicht darauf, die Laufzeitbibliothek nach der ersten Verwendung zu entladen und zu ersetzen.

Einschränkungen

Das In-Process-Hosting weist die folgenden aktuellen Einschränkungen auf:

  • Experimentelle API: Verhaltens- und Verpackungsanforderungen können sich zwischen Versionen ändern.
  • Gemeinsamer Prozessstatus: Alle Clients teilen sich die Hostprozessumgebung, das aktuelle Arbeitsverzeichnis, die native Bibliothek und den Worker-Pool der Laufzeitumgebung.
  • Eingeschränkte Prozessoptionen: SDK-Optionen für eine beliebige Umgebung, Arbeitsverzeichnis, Telemetriekonfiguration, ausführbarer Pfad oder CLI-Argumente werden ggf. abgelehnt. Konfigurieren Sie prozess-globale Werte für den Hostprozess, und verwenden Sie unterstützte typierte Optionen für Laufzeiteinstellungen.
  • Kein Arbeitsverzeichnis pro Client: Die Laufzeit verwendet das Arbeitsverzeichnis des Hostingprozesses.
  • Eine Laufzeitversion pro Prozess: Das Laden eines anderen systemeigenen Bibliothekspfads oder einer anderen Version wird nicht unterstützt.
  • Die Plattformreife variiert: Einige SDK- und Plattformkombinationen weisen eine geringere Abdeckung bei Modellwechseln oder beim Herunterfahren auf. Überprüfen Sie die genaue Kombination, die Sie bereitstellen.

Weiterführende Lektüre