Note
GitHub Copilot Extensions befinden sich in der public preview und können noch geändert werden.
Copilot agents kommunizieren mit der Copilot-Plattform in Form von vom Server gesendeten Ereignissen (SSEs). Anstatt darauf zu warten, dass die Copilot-Plattform ein Update von Ihrem Agent anfordert oder umgekehrt, können Sie SSEs verwenden, um Updates in Echtzeit an die Plattform zu senden und von ihr zu empfangen.
Weitere Informationen zu SSEs finden Sie in der mdn-Dokumentation unter Vom Server gesendete Ereignisse.
Senden von vom Server gesendeten Ereignissen
Ihr Agent sollte für jede Interaktion mit der Copilot-Plattform nur ein SSE senden. Es gibt vier vordefinierte SSEs, die Ihr Agent senden kann:
copilot_confirmation
Das copilot_confirmation
-SSE sendet dem Benutzer eine Eingabeaufforderung zum Bestätigen einer Aktion. Dieses SSE wird über einen Ereignistyp und ein Datenfeld gesendet. Der folgende Code ist ein Beispiel für ein copilot_confirmation
-SSE:
// event: copilot_confirmation data: { // Currently, `action` is the only supported value for `type` in `copilot_confirmation`. "type": "action", // Title of the confirmation dialog shown to the user. "title": "Turn off feature flag", // Confirmation message shown to the user. "message": "Are you sure you wish to turn off the `copilot` feature flag?", // Optional field for the agent to include any data needed to uniquely identify this confirmation and take action once the decision is received from the client. "confirmation": { "id": "id-123", "other": "identifier-as-needed", } }
event: copilot_confirmation
data: {
"type": "action",
Currently, action
is the only supported value for type
in copilot_confirmation
.
"title": "Turn off feature flag",
Title of the confirmation dialog shown to the user.
"message": "Are you sure you wish to turn off the `copilot` feature flag?",
Confirmation message shown to the user.
"confirmation": {
"id": "id-123",
"other": "identifier-as-needed",
}
}
Optional field for the agent to include any data needed to uniquely identify this confirmation and take action once the decision is received from the client.
//
event: copilot_confirmation
data: {
// Currently, `action` is the only supported value for `type` in `copilot_confirmation`.
"type": "action",
// Title of the confirmation dialog shown to the user.
"title": "Turn off feature flag",
// Confirmation message shown to the user.
"message": "Are you sure you wish to turn off the `copilot` feature flag?",
// Optional field for the agent to include any data needed to uniquely identify this confirmation and take action once the decision is received from the client.
"confirmation": {
"id": "id-123",
"other": "identifier-as-needed",
}
}
Nachdem der Benutzer die Bestätigung akzeptiert oder abgelehnt hat, empfängt der Agent eine Nachricht in der Art des folgenden Beispiels:
// { "copilot_confirmations": [ { // A string containing the state of the confirmation. This value is either `accepted` or `dismissed`. "state": "accepted", // An array of strings containing data identifying the relevant action. "confirmation": { "id": "id-123", "other": "identifier-as-needed", } } ] }
{
"copilot_confirmations": [
{
"state": "accepted",
A string containing the state of the confirmation. This value is either accepted
or dismissed
.
"confirmation": {
"id": "id-123",
"other": "identifier-as-needed",
}
}
]
}
An array of strings containing data identifying the relevant action.
//
{
"copilot_confirmations": [
{
// A string containing the state of the confirmation. This value is either `accepted` or `dismissed`.
"state": "accepted",
// An array of strings containing data identifying the relevant action.
"confirmation": {
"id": "id-123",
"other": "identifier-as-needed",
}
}
]
}
Basierend auf den Werten in dieser Nachricht kann der Agent dann die entsprechende Aktion abschließen oder abbrechen.
copilot_errors
Das copilot_errors
-SSE sendet der Copilot-Plattform eine Liste der festgestellten Fehler. Dieses SSE wird über einen Ereignistyp und ein Datenfeld gesendet. Der folgende Code ist ein Beispiel für ein copilot_errors
-SSE:
// event: copilot_errors data: [{ // A string that specifies the error's type. `type` can have a value of `reference`, `function` or `agent`. "type": "function", // A string controlled by the agent describing the nature of an error. "code": "recentchanges", // A string that specifies the error message shown to the user. "message": "The repository does not exist", // A string that serves as a unique identifier to link the error with other resources such as references or function calls. "identifier": "github/hello-world" }]
event: copilot_errors
data: [{
"type": "function",
A string that specifies the error's type. type
can have a value of reference
, function
or agent
.
"code": "recentchanges",
A string controlled by the agent describing the nature of an error.
"message": "The repository does not exist",
A string that specifies the error message shown to the user.
"identifier": "github/hello-world"
}]
A string that serves as a unique identifier to link the error with other resources such as references or function calls.
//
event: copilot_errors
data: [{
// A string that specifies the error's type. `type` can have a value of `reference`, `function` or `agent`.
"type": "function",
// A string controlled by the agent describing the nature of an error.
"code": "recentchanges",
// A string that specifies the error message shown to the user.
"message": "The repository does not exist",
// A string that serves as a unique identifier to link the error with other resources such as references or function calls.
"identifier": "github/hello-world"
}]
copilot_references
Note
Das Rendern von Referenzen wird derzeit für Copilot Chat in GitHub Mobile nicht unterstützt. Erweiterungen, die vom Referenzspeicher abhängig sind, um Antworten zu generieren, funktionieren weiterhin, aber die Referenzen werden dem Benutzer nicht angezeigt.
Das copilot_references
-SSE sendet dem Benutzer eine Liste der Referenzen, die zum Generieren einer Antwort verwendet werden. Dieses SSE wird über einen Ereignistyp und ein Datenfeld gesendet. Der folgende Code ist ein Beispiel für ein copilot_references
-SSE:
// event: copilot_references data: [{ // A string that specifies the type of the reference. "type": "blackbeard.story", // A string that specifies the ID of the reference. "id": "snippet", // An optional field where the agent can include any data needed to uniquely identify this reference. "data": { "file": "story.go", "start": "0", "end": "13", "content": "func main()...writeStory()..." }, // An optional boolean that indicates if the reference was passed implicitly or explicitly. "is_implicit": false, // An optional field for the agent to include any metadata to display in the user's environment. If any of the below required fields are missing, then the reference will not be rendered in the UI. "metadata": { "display_name": "Lines 1-13 from story.go", "display_icon": "icon", "display_url": "http://blackbeard.com/story/1", } }]
event: copilot_references
data: [{
"type": "blackbeard.story",
A string that specifies the type of the reference.
"id": "snippet",
A string that specifies the ID of the reference.
"data": {
"file": "story.go",
"start": "0",
"end": "13",
"content": "func main()...writeStory()..."
},
An optional field where the agent can include any data needed to uniquely identify this reference.
"is_implicit": false,
An optional boolean that indicates if the reference was passed implicitly or explicitly.
"metadata": {
"display_name": "Lines 1-13 from story.go",
"display_icon": "icon",
"display_url": "http://blackbeard.com/story/1",
}
}]
An optional field for the agent to include any metadata to display in the user's environment. If any of the below required fields are missing, then the reference will not be rendered in the UI.
//
event: copilot_references
data: [{
// A string that specifies the type of the reference.
"type": "blackbeard.story",
// A string that specifies the ID of the reference.
"id": "snippet",
// An optional field where the agent can include any data needed to uniquely identify this reference.
"data": {
"file": "story.go",
"start": "0",
"end": "13",
"content": "func main()...writeStory()..."
},
// An optional boolean that indicates if the reference was passed implicitly or explicitly.
"is_implicit": false,
// An optional field for the agent to include any metadata to display in the user's environment. If any of the below required fields are missing, then the reference will not be rendered in the UI.
"metadata": {
"display_name": "Lines 1-13 from story.go",
"display_icon": "icon",
"display_url": "http://blackbeard.com/story/1",
}
}]
Standard-SSE
Das Standard-SSE sendet dem Benutzer eine allgemeine Chatnachricht. Dieser SSE hat keinen Namen und wird ausschließlich über ein Datenfeld gesendet. Der folgende Code ist ein Beispiel für ein Standard-SSE:
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-3.5-turbo-0125", "system_fingerprint": "fp_44709d6fcb", "choices":[{"index":0,"delta":{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]}
Empfangen von vom Server gesendeten Ereignissen
Ebenso wie Ihr Agent SSEs an die Copilot-Plattform sendet, empfängt er auch das resp_message
-SSE von der Plattform. Dieses SSE enthält eine Liste von Nachrichten vom Benutzer sowie optionale Daten zu den einzelnen SSE-Ereignissen, die der Agent senden kann. Das folgende Codebeispiel ist ein Beispiel für eine Curl-Anforderung an Ihren Agent mit einer Nachricht:
curl --request POST \
--url $AGENT_URL \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header "X-GitHub-Token: $RUNTIME_GENERATED_TOKEN" \
--data '{
"messages": [
{
"role": "user",
"content": "What is a closure in javascript?",
"copilot_references": []
}
]
}'
Nächste Schritte
Nachdem Sie jetzt verstehen, wie Ihr Copilot agent mit der Copilot-Plattform kommuniziert, können Sie lernen, wie Sie Ihren Agent in die GitHub-API integrieren können. Weitere Informationen finden Sie unter „Konfigurieren Ihres Copilot-Agents für die Kommunikation mit GitHub“.