신속한 제작을 넘어서 : AI 쌍 프로그래머를위한 더 나은 파트너가되는 방법

신속한 제작을 넘어서 : AI 쌍 프로그래머를위한 더 나은 파트너가되는 방법

개발자가 Github Copilot과 처음으로 작업하기 시작하면 신속한 제작에 중점을 두거나 양질의 제안을 생성하기위한 좋은 맥락과 정보를 제공하는 기술이 있습니다.

그러나 컨텍스트는 Code vs Code의 Copilot Chat에 몇 줄을 입력하는 것 이상입니다. 우리는 Copilot이 작업을 수행 할 때 올바른 파일을 고려하고 있으며, 이러한 파일이 Copilot을 읽기 쉽고 프로젝트 또는 특정 작업에 필요한 추가 지침을 제공합니다.

프롬프트 제작을 넘어서 다음 단계를 밟고 AI 쌍 프로그래머의 더 나은 파트너가 될 수있는 방법에 대해 생각해 봅시다.

컨텍스트가 핵심입니다

나는 항상 이야기로 시작하여 맥락에 대해 이야기하는 것을 좋아합니다. 다른 날 내 파트너와 나는 일어 났고 그녀는“브런치에 가자!”라고 말했다. 환상적인! 누가 브런치를 좋아하지 않습니까?

나는 우리가 가장 좋아하는 곳 중 하나 인 자리를 추천했고, 그녀는“우리는… 나는 그녀가 대답 한 또 다른 장소를 추천했다.

이 대화는 물론 꽤 정상입니다. 내 파트너는 질문을했고, 나는 대답했고, 그녀는 더 많은 맥락을 제공했고, 우리는 앞뒤로 갔다. 내 모든 제안은 내가 가진 정보를 바탕으로 완벽하게 합리적이었습니다. 그리고 그녀가 기대했던 것을 듣지 못했을 때 그녀는 조금 더 많은 지침을 제공했습니다. 우리가 계속 이야기하면서, 그녀는 그녀가 와플을 갈망하고 있다는 것을 깨달았습니다. 그녀는 내 제안을 고려할 때 발견했습니다.

이것은 우리가 다른 사람들과 대화하는 방식뿐만 아니라 Copilot을 포함한 생성 AI 도구로 작업하는 방법도 매우 중요합니다. 우리는 질문을하고, 답변을 받고, 더 많은 맥락을 제공하고 우리가 보는 것에 기초하여 결정을 내리기 위해 앞뒤로 일합니다.

우리가 기대하는 제안을받지 못하거나, 우리가 염두에두고있는 사양에 구축되지 않았다면, Copilot은 파트너와 대화를 시작할 때 새로운 어딘가에 제안 할 컨텍스트가없는 것처럼 필요한 상황이 없었을 가능성이 매우 높습니다.

Github Copilot이 코드와 함께 작동하는 방법

IDE의 Copilot이 맥락을 얻는 방법을 이해하려면 그것이 어떻게 작동하는지 이해하는 것이 중요합니다. 외부 작업을 수행하는 에이전트 모드를 제외하고 Copilot은 코드 제안을 생성하므로 코드를 빌드하거나 실행하지 않습니다. 실제로, 그것은 쌍 프로그래머와 매우 유사하게 행동합니다. 다른 개발자와 마찬가지로 우리가 지적한 파일의 코드 (및 댓글)를 읽습니다.

그러나 팀원과는 달리 Copilot은 “제도적 지식”또는 경험이 제공되는 배경 정보가 없습니다 (사용자 지침을 추가 할 수는 있지만 나중에는 더 많은 정보를 제공 할 수 있습니다). 이것은 왜 사물이 특정 방식으로 만들어 졌는지 (어딘가에 문서화되지는 않았지만 모든 사람이“알고”), 항상 사용해야하는 내부 라이브러리 또는 프레임 워크 또는 따라야하는 패턴의 역사 일 수 있습니다.

분명히,이 모든 배경 정보는 Copilot에서 올바른 코드 제안을 얻는 데 중요합니다. 예를 들어 DAL (Data Abstraction Layer)을 사용하고 있지만 Copilot이 원시 SQL 코드를 생성하는 경우 제안이 도움이되지는 않습니다.

문제는 Copilot이 잘못된 코드를 생성한다는 것이 아닙니다. 대신, 필요한 형식과 구조로 코드를 생성하는 것은 컨텍스트가 부족합니다. 기본적으로 우리는 와플을 원하고 우리에게 오믈렛을 제공합니다. 와플을 얻기 위해 무엇을 할 수 있는지 봅시다.

품질 코드는 주석이 필요하지 않아야하며 의견을 추가하는 것은 “코드 냄새”또는 무언가가 향상 될 수 있음을 나타내는 일반적인 믿음이 있습니다. 가능한 한 읽을 수있는 코드를 작성하는 것은 고귀하지만, 우리가 일상적인 일에서 종종 부족한 것입니다.

우리가 “마크를 쳤다”라는 경우에도 코드를 한 개발자에게 읽을 수 있기 때문에 모든 개발자가 읽을 수 있다는 것을 의미하지는 않습니다. 몇 가지 주석 줄은 가독성을 보장하는 데 먼 길을 갈 수 있습니다.

Copilot도 마찬가지입니다! 위에서 강조했듯이 Copilot은 특정 상황을 제외하고 코드를 실행하거나 컴파일하지 않습니다. 대신 개발자와 마찬가지로 코드를 “읽습니다”.

예를 들어, Python의 함수/모듈에 문서화를 갖는 지침에 따라 Copilot이 코드의 수행 및 수행 방식을 더 잘 이해하는 데 도움이 될 수 있습니다. 이를 통해 Copilot은 기존 코드를 사용하여 새 코드가 이미 동일한 패턴과 관행을 따르는 것을 확인하여 고품질 제안을 생성 할 수 있습니다.

💡 : 파일을 열면 파일을 찾을 때보 다 파일을 더 나은 상태로 남겨 두는 것이 좋습니다.. 당신이 할 수있는 작은 개선 사항 중 하나는 코드를 설명하는 데 도움이되는 장소에 몇 가지 의견을 추가하는 것입니다. 항상 Copilot에게 의견의 첫 번째 초안을 생성하도록 요청할 수 있으며 Copilot이 놓친 추가 세부 정보를 추가 할 수 있습니다!

프로젝트에서 Github Copilot과 함께 사용자 정의 지침을 사용하는 이점

품질 제안을 생성하기 위해 Copilot은 자신이하고있는 일과 어떻게하는지에 대한 맥락을 갖는 혜택을받습니다. 사용하고있는 기술 및 프레임 워크, 따라야 할 코딩 표준 및 건축 할 수있는 방법에 대한 배경조차도 Copillot의 제안에 대한 품질 막대를 높이는 데 도움이됩니다. 이것은 맞춤형 지침이 시작되는 곳입니다.

사용자 정의 지침은이 모든 배경 정보를 제공하고 기본 규칙을 설정하는 데 도움이됩니다 (호출하려는 API, 원하는 패턴 또는 스타일 선호도 등).

시작하려면 중요한 모든 것을 명명 된 파일에 배치합니다. Copilot-Instructions.md 당신의 내부 .githubub 접는 사람. 마크 다운 파일이므로 다음과 같은 섹션을 만들 수 있습니다. 프로젝트 구조,,, 기술,,, 코딩 표준그리고 모든 단일 채팅 요청에서 Copilot을 고려하기를 원하는 다른 메모. 또한 기능 기반 구성 요소 대신 클래스 기반 React 구성 요소를 사용하는 등 Copilot이 항상 올바른 경로를 선택하지 않는 작업에 대한 지침을 추가 할 수 있습니다 (모든 Cool Kids는 기능 기반 구성 요소를 사용하고 있습니다).

사용자 정의 지침은 Copilot으로 전송됩니다. 모든 싱글 채팅 요청. 지침을 전체 프로젝트와 관련된 정보로 제한하려고합니다. 너무 많은 세부 사항을 제공하면 Copilot이 중요한 것을 결정하기가 조금 더 어려워 질 수 있습니다.

간단하게, 당신은 기본적으로 이야기를 할 때 너무 많은 세부 사항을 공유하는 친구에 대해 생각하고 주요 음모에 집중하기가 까다로울 수있는 방법에 대해 생각할 수 있습니다. Colecilot도 마찬가지입니다. 프로젝트 수준 지침 및 개요를 제공하여 작동하는 환경을 가장 잘 이해하는 것이 가장 좋습니다.

경험의 좋은 규칙은 프로젝트의 다양한 측면을 강조하는 섹션을 갖는 것입니다. 웹 앱의 클라이언트 및 서버가있는 Monorepo의 개요는 다음과 같습니다.

# Tailspin Toys Crowd Funding

Website for crowd funding for games.

## Backend

The backend is written using:

- Flask for the API
- SQLAlchemy for the ORM
- SQLite for the database

## Frontend

The frontend is written using:

- Astro for routing
- Svelte for the components and interactivity
- Tailwind CSS for styling

## Code standards

- Use good variable names, avoiding abbreviations and single letter variables
- Use the casing standard for the language in question (camelCasing for TypeScript, snake_casing for Python, etc.)
- Use type hints in all languages which support them

## Project structure

- `client` contains the frontend code
- `docs` contains the documentation for the project
- `scripts` contains the scripts used to install services, start the app, and run tests
- `server` contains the backend code 

이것은 비교적 약자이지만 구조를 주목하십시오. 우리는 Copilot에 우리가 보유한 프로젝트, 구조, 사용중인 기술 및 코드를 만드는 방법에 대한 지침에 대해 알려줍니다. 우리는 유닛 테스트를 작성하는 것과 같은 작업에 특정한 것이 없습니다.

특정 작업에 대한 특정 지침을 제공합니다

교육 파일에 대한 대화를 계속하고 있습니다…

대 코드 및 코드 스페이스도 지원합니다 .instructions.md 파일. 이것들은 그저 비슷합니다 copilot-instructions.md 이전에 말한 파일은 특정 유형의 작업에 사용되도록 설계되어 .github/instructions.

API 경로에 대한 플라스크 청사진을 구축하는 프로젝트를 고려하십시오. 파일 구성 방법과 단위 테스트를 작성하는 방법에 대한 요구 사항이있을 수 있습니다. 호출 된 사용자 정의 지침 파일을 만들 수 있습니다 flask-endpoint.instructions.md그것을 넣으십시오 .github/instructions그런 다음 Copilot을 요청할 때 새 엔드 포인트를 만들 때 채팅에 컨텍스트로 추가하십시오. 다음과 같은 것처럼 보일 수 있습니다.

# Endpoint creation guidelines

## Endpoint notes

- Endpoints are created in Flask using blueprints
- Create a centralized function for accessing data
- All endpoints require tests
    - Use the `unittest` module for testing
    - All tests must pass
    - A script is provided to run tests at `scripts/run-server-tests.sh`

## Project notes

- The Python virtual environment is located in the root of the project in a **venv** folder
- Register all blueprints in `server/app.py`
- Use the [test instructions](./python-tests.instructions.md) when creating tests

## Prototype files

- [Endpoint prototype](../../server/routes/games.py)
- [Tests prototype](../../server/tests/test_games.py)

엔드 포인트를 만드는 방법에 대한 구체적인 정보를 어떻게 제공하고 있는지 확인하십시오. 또한 우리가 다른 파일에 링크하는 것을 알게 될 것입니다. 프로젝트에서 하이퍼 링크 사용 – Copilot을위한 기존 파일 모두 대표 예제로 사용할 기존 파일과 자세한 내용은 기타 명령어 파일을 사용합니다.

또한 패턴에 따라 파일 유형에 지침을 적용 할 수도 있습니다. 예를 들어 테스트를하겠습니다. 그들이 모두 있었다면 server/tests그리고 시작했습니다 test_테스트 파일에서 작업 할 때 Copilot이 항상 지침을 포함하도록 메타 데이터를 상단에 추가 할 수 있습니다.

---
applyTo: server/tests/test_*.py
---

이를 통해 Copilot이 적시에 올바른 정보에 액세스 할 수 있도록 많은 유연성을 제공합니다. 이는 명령 파일을 추가하여 명시 적으로 수행하거나 특정 파일을 작성할 때 Copilot이 사용할 패턴을 제공하여 암시 적으로 수행 할 수 있습니다.

이전과 마찬가지로, 이것들은 저장소의 아티팩트입니다. 교육 파일 모음을 구축하는 데 시간이 좀 걸릴 수 있지만, 그 투자는 고품질 코드의 형태와 결과적으로 생산성을 향상시킬 것입니다.

완전히 재사용 가능한 프롬프트

VS 코드 팀은 최근 프롬프트 파일이라는 새로운 실험 기능을 게시했습니다. 그것들은 여전히 ​​개발 중이기 때문에 너무 깊이 파고 들기를 원하지 않지만 문서의 프롬프트 파일에 대한 자세한 내용을 읽고 현재 구현 될 때이를 활용하는 방법을 볼 수 있습니다. 간단히 말해서, 그들은 당신이 Copilot에 대한 스크립트 된 프롬프트를 효과적으로 만들 수 있습니다. 그들이 사용할 수있는 Copilot 모드 (요청, 편집 및 에이전트), 호출 할 도구 및 개발자에게 요청할 질문을 선택할 수 있습니다. 이들은 강화 된 재사용 및 일관성을 위해 팀이 만들 수 있습니다.

MCP (Model Context Protocol)로 Github Copilot의 기능 확장

끊임없이 변화하는 소프트웨어 개발 환경에서 우리는 우리가 작업하는 정보가 정확하고 관련성이 있으며 최신 상태인지 확인해야합니다. 이것이 MCP 또는 모델 컨텍스트 프로토콜이 구축 된 것입니다! MCP는 처음에 Anthropic에 의해 개발 된 오픈 소스 프로토콜로 조직이 서비스 나 데이터를 생성 AI 도구에 노출시킬 수 있습니다.

IDE에 MCP 서버를 추가하면 Copilot이 “친구에게 전화”하여 정보를 찾거나 귀하를 대신하여 작업을 수행 할 수 있습니다. 예를 들어, 극작가 MCP 서버는 극작가 엔드 투 엔드 테스트를 만드는 데 도움이되는 반면 Github MCP 서버는 리포지토리, 문제 및 풀 요청과 같은 GitHub 서비스에 대한 액세스를 제공합니다.

예를 들어, 극작가 MCP 서버를 IDE에 추가했다고 가정 해 봅시다. Copilot에 웹 사이트에서 기능을 검증하기위한 새로운 테스트를 작성하도록 요청하면 Copilot은 권위있는 소스를 참조하여 최상의 코드를 생성 할 수 있습니다.

나만의 MCP 서버를 만들 수도 있습니다! 내가 일반적으로 듣는 한 가지 질문은 Colecilot이 내부 코드베이스 또는 라이브러리를 통해 어떻게 볼 수 있는지에 관한 것입니다. 사용자 정의 MCP 서버를 사용하면 Copilot이 이러한 유형의 쿼리를 수행 할 수있는 외관을 제공 한 다음 발견 된 정보를 활용하여 내부 환경을 기반으로 코드를 제안합니다.

MCP는 동료 인 Cassidy가 MCP에 대한 팁, 트릭 및 통찰력을 공유하는 자체 블로그 게시물을 갖기에 충분히 큽니다.

프롬프트를 넘어 생각

명확하게하겠습니다 : 신속한 제작이 중요합니다. 개발자가 Github Copilot을 사용하기 시작할 때 배워야하는 최초의 기술 중 하나입니다.

그러나 좋은 프롬프트를 작성하는 것은 답을 생성 할 때 Copilot이 고려되는 한 조각입니다. 위에서 강조 표시된 모범 사례 (주석 및 우수한 코드, 사용자 정의 지침 및 MCP 서버를 사용하면 Copilot이 원하는 작업과 원하는 방법을 이해하도록 도울 수 있습니다. 내 비유로 다시 가져 오려면 오믈렛 대신 와플을 원할 때 Copilot이 알 수 있도록 할 수 있습니다.

그리고 그 메모에서 나는 브런치로 떠납니다.

시작하세요 github copilot>와 함께>

작성자가 작성했습니다

크리스토퍼 해리슨

선임 개발자 옹호자, Github

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다