Get better answers by setting the context for GitHub Copilot Chat in Visual Studio
You can use GitHub Copilot Chat in Visual Studio to get coding information and support, such as syntax, programming concepts, context-specific code help, test cases, debugging, and more, without leaving the IDE. Copilot Chat is integrated into Visual Studio, which means it can understand what you're working on by gathering useful clues from what you have in the IDE.
In addition to your prompt, Copilot uses additional context, like the code in your current file and the chat history, to generate a response. In this article, you learn how to get better answers by providing more information to Copilot Chat including:
- Use slash commands to quickly specify common tasks like
/explain
to get code explanations. - Use the guided chat experience and custom instructions to refine context in Visual Studio 17.12 or later.
- Scope the chat to specific files using references.
- Review the source used by Copilot to generate the answer.
- Use different threads for each of your Copilot chats so you can maintain different contexts in each.
Learn more about AI-assisted development in Visual Studio and how to use Copilot Chat in Visual Studio.
Prerequisites
To get started using GitHub Copilot Chat in Visual Studio, you need:
- Visual Studio 2022 version 17.8 or later
- Sign in to Visual Studio using a GitHub account with Copilot access
** You can use GitHub Copilot for Free. Sign up and leverage AI to code faster and more efficiently. - GitHub Copilot in Visual Studio
- GitHub Copilot Chat in Visual Studio
Support for GitHub Copilot Chat will be provided by GitHub and can be reached at https://support.github.com.
Prompting guidance
The guided chat experience in Visual Studio 17.12 and later helps refine your prompts to clarify context for better answers. GitHub Copilot Chat now guides you with clarifying questions when context is unclear.
Enable custom instructions
The custom instructions feature enables you to automatically add pre-specified contextual details to your chat questions. Copilot Chat uses these instructions tailored to your specific context, such as, the way your team works, the tools you use, or the specifics of your project, when generating responses.
To configure custom instructions:
- Create/add a custom instructions file
.github/copilot-instruction.md
in the root of your repository. - Enable the feature in Visual Studio via Tools > Options > GitHub > Copilot > select (Preview) Enable custom instructions to be loaded from .github/copilot-instructions.md files and added to requests..
Custom instructions are not visible in the Chat view or inline chat. However, when used by Copilot, the.github/copilot-instructions.md
file is listed in the References list of a response.
Use slash commands in Copilot Chat for common tasks
Slash commands in Copilot Chat help you set the intent quickly for common development tasks. By using specific slash commands to form your question, you can get better answers without having to write out long questions.
You can use slash commands in a chat window, or directly inline in the code that you're looking to modify, using inline code assistance. Commands that help modify or add to the code file you have open in the editor will work both in the inline code assistant and the chat windows whereas commands for more general coding questions work only in the chat pane.
Command | Usage | Chat window | Inline chat |
---|---|---|---|
/doc | Add comments for specified or selected code. Examples: - /doc DeleteBasketAsync method in BasketService.cs - select desired code and enter /doc |
Yes | Yes |
/explain | Get code explanations. Examples: - /explain the AddItemToBasket method in BasketService.cs - select desired code and enter /explain |
Yes | Yes |
/fix | Propose a fix for problems in the selected code. Examples: - /fix the SetQuantities method in BasketService.cs - select desired code and enter /fix |
Yes | Yes |
/generate | Generate code to answer specified question. Example: /generate code to add two numbers in Calculator.cs |
Yes | Yes |
/help | Get help on using Copilot Chat. Example: /help |
Yes | Yes |
/optimize | Analyze and improve running time of the selected code. Examples: - /optimize the AddItemToBasket method in BasketService.cs - select desired code and enter /optimize |
Yes | Yes |
/tests | Create unit tests for the selected code. Example: select desired code and enter /tests using XUnit Framework |
Yes | Yes |
Reference: scope Copilot results to a particular file or entire solution
You can ask your coding related questions in natural language and GitHub Copilot Chat will answer these in the context of the codebase open in Visual Studio. With references you can get more specific about the information you want Copilot to consider when answering your question.
By selecting a specific context in your codebase, you're able to form better questions easily without having to write out or paste long pieces of information. Specifying the context also enables Copilot to provide you with more relevant answers.
Reference a file
To easily reference a file in GitHub Copilot Chat, simply add a # symbol at the beginning of the file name. For example, if you have a file named BasketService.cs, refer to it in the chat as #BasketService.cs.
Reference a method, class, or function
With Visual Studio 2022 version 17.11, you can now reference a specific method, class, or function in GitHub Copilot Chat.
To easily reference a method, class, or function in GitHub Copilot Chat, simply add a # symbol at the beginning of the method, class, or function name. For example, if you have a method named BasketAddItem, refer to it in the chat as #BasketAddItem.
Reference the entire solution
Use @workspace to refer to the solution active in the IDE for context. When using @workspace for context, Copilot Chat leverages the information about the files, projects, and configurations that are currently open and being worked on within your IDE. This enables Copilot Chat to provide more relevant and context-aware suggestions and answers.
With Visual Studio 2022 version 17.11, GitHub Copilot Enterprise subscribers can now use @github
in chat to include context from their entire repository and to search the web (if search is enabled by your admin). To learn more about the collection of GitHub-specific skills that Copilot can use to answer your question when using @github
, see Using GitHub skills for Copilot.
Usage examples
Here are some examples of using references for context control:
Example | Context used by Copilot to form the question |
---|---|
What is the purpose of #MyFile.cs: 66-72? | Exact section of the file |
Where are the tests in #BasketService.cs? | BasketService.cs |
/explain the #AddItemToBasket in #BasketService.cs | AddItemToBasket method in BasketService.cs |
Is there a delete basket method in this @workspace | Current solution open in the IDE |
I have a test method named #TestCalculator. How can I ensure that it's being executed correctly? | TestCalculator method |
Could you explain the differences between classes #BasketService and #OrderService? | BasketService class and OrderService class |
In my @workspace where is #AddItemToBasket? | Current solution open in the IDE |
Review the sources used by Copilot Chat
Copilot Chat displays the context it used after every result, so that you can tell what was taken into account when answering your question. When you ask a Copilot Chat a question and get a response in the chat window, a References dropdown appears below the response. The entries in the References dropdown list show you the context referenced by Copilot Chat to generate that response. This information can help you modify your question to get better and more relevant answers.
Organize: isolate chats with Copilot into threads
If you’re using Copilot Chat extensively to ask questions as you code, you can organize your conversations in a way that keeps them on-topic. Copilot Chat for Visual Studio now provides an easy way to start new conversations (threads) to keep them focused on the task at hand, and keep the context clear so the answers are based on relevant history.
New chat thread
You can start a new thread by selecting the Create new thread in the chat window.
Switch chat thread
You can select between multiple ongoing threads to provide the right historical context for your question.
Promote inline chat to the chat window
With Visual Studio 2022 version 17.11, you can now preserve the history of your inline chat by promoting it to the chat window. Select Continue in chat window... to maintain a record and context of the conversation, and continue in the chat window.
Best practices
Copilot Chat uses the chat history to get context about your request. To give Copilot only the relevant history:
- Use threads to start a new conversation for a new task.
- Delete requests that are no longer relevant or that didn’t give you the desired result.
Keep the chat conversation open and continue to iterate and prompt Copilot to improve the suggested solution. Copilot has both the context of the generated code and your current conversation history. As you keep asking additional questions, Copilot further refines the response according to your requirements. See Prompt engineering for GitHub Copilot for strategies on effective prompting to improve your Copilot results.