Skip to main content

Copilot 플랫폼과 통신하도록 Copilot 에이전트 구성

Copilot agent을(를) 사용하여 서버에서 보낸 이벤트를 보내고 수신하여 Copilot 플랫폼과 상호 작용하는 방법을 알아봅니다.

Note

GitHub Copilot Extensions은(는) 공개 미리 보기 버전이며 변경될 수 있습니다.

Copilot agents은(는) 서버 전송 이벤트(SSE) 형식으로 Copilot 플랫폼과 통신합니다. Copilot 플랫폼이 에이전트에서 업데이트를 요청할 때까지 기다리거나 그 반대로 기다리는 대신 SSE를 사용하여 실시간으로 플랫폼에서 업데이트를 보내고 받을 수 있습니다.

SSE에 대한 자세한 내용은 mdn 설명서에서 서버에서 보낸 이벤트를 참조하세요.

서버에서 보낸 이벤트 보내기

에이전트는 Copilot 플랫폼과의 각 상호 작용에 대해 하나의 SSE만 보내야 합니다. 에이전트에서 보낼 수 있는 미리 정의된 네 개의 SSE는 다음과 같습니다.

copilot_confirmation

copilot_confirmation SSE는 사용자에게 작업을 확인하는 프롬프트를 보냅니다. 이 SSE는 이벤트 유형 및 데이터 필드를 통해 전송됩니다. copilot_confirmation SSE 예시를 보려면 다음 코드를 참조하세요.

TypeScript
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",
    }
}

사용자가 확인을 수락하거나 해제하면 에이전트는 다음 예시와 유사한 메시지를 받습니다.

TypeScript
{
    "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",
            }
        }
    ]
}

이 메시지의 값에 따라 에이전트는 적절한 작업을 완료하거나 취소할 수 있습니다.

copilot_errors

copilot_errors SSE는 Copilot 플랫폼에 발생한 오류 목록을 보냅니다. 이 SSE는 이벤트 유형 및 데이터 필드를 통해 전송됩니다. copilot_errors SSE 예시를 보려면 다음 코드를 참조하세요.

TypeScript
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

렌더링 참조는 현재 Copilot Chat in GitHub Mobile에 대해 지원되지 않습니다. 응답을 생성하기 위해 참조 메모리에 의존하는 확장은 계속 작동하지만 참조는 사용자에게 표시되지 않습니다.

copilot_references SSE는 사용자에게 응답을 생성하는 데 사용되는 참조 목록을 보냅니다. 이 SSE는 이벤트 유형 및 데이터 필드를 통해 전송됩니다. copilot_references SSE 예시를 보려면 다음 코드를 참조하세요.

TypeScript
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",

    }
}]

기본 SSE

기본 SSE는 사용자에게 일반 채팅 메시지를 보냅니다. 이 SSE는 명명되지 않았으며 데이터 필드를 통해서만 전송됩니다. 기본 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}]}

서버에서 보낸 이벤트 수신

에이전트가 Copilot 플랫폼으로resp_message SSE를 보내는 것처럼 플랫폼에서도 SSE를 받습니다. 이 SSE에는 에이전트가 보낼 수 있는 각 SSE 이벤트와 관련된 선택적 데이터뿐만 아니라 사용자의 메시지 목록이 포함됩니다. 메시지를 포함하는 에이전트에 대한 curl 요청 예시는 다음 코드 샘플을 참조하세요.

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": []
            }
        ]
    }'

다음 단계

Copilot agent이(가) Copilot 플랫폼과 통신하는 방법을 이해했으므로 이제 에이전트를 GitHub API와 통합하는 방법을 알아볼 수 있습니다. GitHub와 통신하도록 Copilot 에이전트 구성을(를) 참조하세요.