è¿æ¯å¼å§ä½¿ç¨ Github Copilot çå¿«éåèæå
éè¦å æ¥æä¸ä¸ªGithubè´¦å·ï¼å¹¶è®¢é Copilotã
| äºé¡¹ | 说æ |
|---|---|
| Github è´¦å· | 注åå°å |
| 订é Github Copilot | 订é å°å |
卿©å±ååºä¸æç´¢å®è£ ä¸é¢æä»¶
| æä»¶åç§° | åè½ |
|---|---|
GitHub Copilot | ç¼è¾å¨ä¸è¿è¡ä»£ç è¡¥å ¨æç¤º |
GitHub Copilot Chat | æä»¶æ å¯ä»¥ä¸copilotå¯¹è¯ |
GitHub Copilot æä»¶å¾æ ï¼ç¶åç¹å» Sign in to GitHub ç»éãAccounts 徿 ï¼ç¶åç¹å» ä½¿ç¨ Github ç»é以使ç¨Github Copilot è¿è¡ç»éã| æ¹æ¡ | ä»·æ ¼ | ç¹æ§ |
|---|---|---|
| Copilot Individual | 10ç¾å
/人/æ (å¦ç, æå¸, 弿ºé¡¹ç®è´¡ç®è å è´¹) | 代ç è¡¥å ¨, è天æºå¨äºº |
| Copilot Business | 19ç¾å /人/æ | 代ç è¡¥å ¨, è天æºå¨äºº, å½ä»¤è¡å·¥å ·, å®å ¨æ¼æ´çæ¥, 代ç åè, å ¬å ±ä»£ç çæ¥, ç¥è¯äº§æ, ä¼ä¸å®å ¨ä¸éç§ä¿é |
| Copilot Enterprise | 39ç¾å /人/æ | Business ç¹æ§ + ç§æä»£ç åºç个æ§åè天 + ææ¡£æç´¢æ»ç» + Git Pull Request æè¦ + 代ç å®¡æ¥ + 模åå¾®è° |
| åç§° | æè¿° |
|---|---|
Inline Suggestions | å¨ç¼è¾å¨ä¸ç´§é»å æ æå¨ä½ç½®æ¾ç¤ºå»ºè®® |
Completions Panel | å¨ç¼è¾å¨ä¸å±ç¤ºå®æ´ç建议å表 |
Inline Chat | å¨ç¼è¾å¨ä¸ç´§é»å æ æå¨ä½ç½®åèµ·å¯¹è¯ |
Editor Chat | å¨ç¼è¾å¨ä¸æå¼å®æ´ç对è¯çé¢ |
Silde Chat | å¨ç¼è¾å¨çä¾§è¾¹æ æå¼å¯¹è¯çé¢ |
Quick Chat | å¨é¡¶é¨å¤èµ·å¯¹è¯çé¢ |
copilot çå
³ç³»ï¼å°±åä½å®¶ä¸æç»å¸çå
³ç³»ãcopilot è½å¤ç»å¶åºç²¾ç¾çæç»ï¼å³ä»£ç ï¼ï¼ä½ éè¦å°½å¯è½å
¨é¢ãå¹²ç»ãæ¸
æ°å°æè¿°ä½ çæ
äºï¼å³ä¸ä¸æï¼ã| ç±»å | 说æ |
|---|---|
| æä»¶ | Copilot伿¥çç¼è¾å¨ä¸å½ååç´§é»æå¼çæä»¶ã |
| 注é | Copilot伿 ¹æ®ç´§é»ç注éï¼ä¸ºä½ çä»£ç æä¾å¸®å©å建议ãå¦ docstring, åæ³¨é, è¡æ³¨éä¹ç±»ã |
| å½å | è¯å¥½çå½åè½å¸®å©Copilotæ´å¥½å°çè§£ä½ ç代ç ï¼å¦å½æ°å, åéå, æä»¶åç |
| 代ç | Copilot伿¥çä½ ç代ç åå®éè¿ç代ç ï¼ä»¥çæå¸®å©ä½ ç建议ã |
Copilot伿¥çç¼è¾å¨ä¸å½ååç´§é»æå¼çæä»¶ï¼ä»¥åæä¸ä¸æå¹¶æä¾éå½ç建议ã
å建ä¸ä¸ªæ°æä»¶æ¶ï¼å¨æä»¶é¡¶é¨æ·»å 注éï¼æè¿°ä½ çéæ±ãè¿å¯¹ Copilot 徿叮å©ã
* ä¸é¢è¯´æå°ä½¿ç¨...表示copilotå¼å§çæçä½ç½®
# Download file from an URL and analyze its content
# Details:
# * Download the file from an URL
# * Save the downloaded files into `./download` folder
# * Use `filetype` of the file to specify how to parse
# * Filetype can be `.pdf`, `.html`, `.epub`, `.md` and `.txt`
# * Use NLP or OCR to get the file content
# * Tokenize the file content and get the statistics result
import ...
卿¯ä¸ªå½æ°ä¸é¢æéè¦ä»£ç åçä¸é¢æ·»å 注éï¼ä»¥å¸®å© Copilot äºè§£ä½ 代ç ä¸çä¸äºæå¾æé®é¢ã
* ä¸é¢è¯´æå°ä½¿ç¨...表示copilotå¼å§çæçä½ç½®
彿°ä¸æ¹æ·»å 注é说æ
# parse the JSON string into User object
def ...
ä»£ç æ·»å 注é说æ
# ...
api_sever = FastApi(...)
# starting the API Sever, enable ssl, bind to 8443 port
...
ææ¶åå½ä½ å·²ç»æ¥æè¯¦ç»è®¾è®¡ææ¡£ï¼ä½æªç¼ååè½ä»£ç æ¶ï¼å¯ä»¥ç´æ¥ä½¿ç¨ docstring ä¸çæè¿°æ¥è®© copilot çæä»£ç ã
def send_email(to_address: Email, subject: str, content: HTML): -> StatusCode:
"""
Send email to specified address
Parameters
----------
to_address : Email
The email address to send to
subject : str
The email subject
content : HTML
The email content
Returns
-------
StatusCode
The sending result
"""
...
å¦æä½ ä¸æ³åæ¢å° copilot chat æ¶ï¼æ³¨éä¹å¯ä»¥ç¨äºæé®ã
# Q: What is the difference between `os.path.join` and `pathlib.PurePath`?
# A: ...
ä½ ä¹å¯ä»¥è®© copilot ä¸ºä½ çæ
todoå表æ¥è¯ä¼°å·¥ä½éã
# Parse the json file into a Talks object
# TODO:
# -[ ] 1. ...
ä½ çå½ååºè¯¥è¶³å¤æç¡®ä»¥ä¾¿äº Copilot çè§£ä½ çæå¾
a = 60
def send(dict):
...
class data:
...
timeout = 60
def send_email(to_address: Email, subject: str, content: HTML): -> StatusCode:
...
class Email:
...
æä¾ç段代ç 示ä¾ï¼ä»¥å¸®å© Copilot æ´å¥½å°å¼å§æ°çå¼åä»»å¡ã
- 使ç¨çæ¡æ¶ä¸åº
- 代ç 飿 ¼
- ç®æ³é»è¾
from typing import List
from typing import Optional
from sqlalchemy import ForeignKey
from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "user_account"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(30))
fullname: Mapped[Optional[str]]
addresses: Mapped[List["Address"]] = relationship(
back_populates="user", cascade="all, delete-orphan"
)
def __repr__(self) -> str:
return f"User(id={self.id!r}, name={self.name!r}, fullname={self.fullname!r})"
# Email Address
...
æä¾çæ®µæ°æ®ç¤ºä¾ï¼ä»¥å¸®å© Copilot æ´å¥½å°å¼å§æ°çå¼åä»»å¡ã
- æ°æ®ç»æä¸ç±»å
- å½å
- å¼å¤çé»è¾
dailogs = [
{
"timestamp": "May 1, 2023 11:00:00",
"text": "Hello, World!",
"speaker": "Jack",
},
{
"timestamp": "May 1, 2023 11:01:00",
"text": "Hello, Copilot!",
"speaker": "Copilot",
},
]
# Parse the json object into `Dialog` object
...
对äºmacç¨æ·å»ºè®®ä¿®æ¹altç¸å
³çå¿«æ·é®ï¼å 为macä¸çalt+忝鮿å¯è½è¢«è¾å
¥æ³ä½¿ç¨äºãè¥æèªå®ä¹è¿è¾å
¥æ³keylayoutï¼å忽ç¥è¿å¥è¯ã
å¦å¤æ²¡æå¿«æ·é®çå½ä»¤ï¼å¯ä»¥å¤èµ·å½ä»¤é¢æ¿åè¾å
¥æ¥è¯¢å
³é®åçéåæ§è¡ã
| å½ä»¤ | 说æ | å¿«æ·é® | Mac å¿«æ·é® |
|---|---|---|---|
editor.action.inlineSuggest.trigger | 触åå è建议 | alt+\ | alt+\ |
editor.action.inlineSuggest.showPrevious | æ¾ç¤ºä¸ä¸ä¸ªå è建议 | alt+[ | alt+[ |
editor.action.inlineSuggest.showNext | æ¾ç¤ºä¸ä¸ä¸ªå è建议 | alt+] | alt+] |
editor.action.inlineSuggest.acceptNextWord | æ¥åå è建议çä¸ä¸ä¸ªå | ctl+right | cmd+right |
editor.action.inlineSuggest.commit | æ¥åå è建议 | Tab | Tab |
editor.action.inlineSuggest.hide | éèå è建议 | Esc | Esc |
editor.action.inlineSuggest.acceptNextLine | æ¥åå è建议çä¸ä¸è¡ | - | - |
| å½ä»¤ | 说æ | å¿«æ·é® | Mac å¿«æ·é® |
|---|---|---|---|
github.copilot.generate | æå¼ Completions Panel | ctrl+enter | ctrl+enter |
github.copilot.acceptCursorPanelSolution | æ¥åCompletions Panelå
æ æå¨ç建议 | ctrl+/ | ctrl+/ |
github.copilot.previousPanelSolution | æ¥çä¸ä¸ä¸ªå»ºè®® | alt+[ | alt+[ |
github.copilot.nextPanelSolution | æ¥çä¸ä¸ä¸ªå»ºè®® | alt+] | alt+] |
| å½ä»¤ | 说æ | å¿«æ·é® | Mac å¿«æ·é® |
|---|---|---|---|
github.copilot.toggleCopilot | å¯ç¨/ç¦ç¨ Copilot è¡¥å ¨æç¤º | - | - |
github.copilot.collectDiagnostics | æ¶éè¯æä¿¡æ¯ | - | - |
github.copilot.openLogs | æå¼æ¥å¿çªå£ | - | - |
github.copilot.sendFeedback | æå¼ç¤¾åºç½ç« | - | - |
github.copilot.signIn | ç»é | - | - |
| å½ä»¤ | 说æ | å¿«æ·é® | Mac å¿«æ·é® |
|---|---|---|---|
github.copilot.interactiveEditor.explain | è¿è¡è§£éï¼éä¸å 容æå æ æå¨çæä»¶) | - | - |
github.copilot.terminal.explainTerminalSelection | 对æ¤è¿è¡è§£é(éè¦å¨ç»ç«¯ä¸ä½¿ç¨) | - | - |
github.copilot.terminal.explainTerminalSelectionContextMenu | Copilot: 对æ¤è¿è¡è§£é(éè¦å¨ç»ç«¯ä¸ä½¿ç¨) | é¼ æ å³é®èå | é¼ æ å³é®èå |
github.copilot.terminal.explainTerminalLastCommand | 对ç»ç«¯ä¸æåä¸ä¸ªå½ä»¤è¿è¡è§£é(éè¦å¨ç»ç«¯ä¸ä½¿ç¨) | - | - |
| å½ä»¤ | 说æ | å¿«æ·é® | Mac å¿«æ·é® |
|---|---|---|---|
inlineChat.start | 代ç å è天 | - | - |
github.copilot.interactiveEditor.generate | 卿¤çæ(å¨å
æ æå¨ä½ç½®å¤èµ·inline chatç/generateåè½) | - | - |
github.copilot.interactiveEditor.generateDocs | çæææ¡£ | - | - |
github.copilot.interactiveEditor.generateTests | çææµè¯ | - | - |
github.copilot.interactiveEditor.fix | ä¿®å¤æ¤ | - | - |
| å½ä»¤ | 说æ | å¿«æ·é® | Mac å¿«æ·é® |
|---|---|---|---|
workbench.action.quickchat.toggle | å¼å¯/å ³é Quick Chat | shift+cmd+i | shift+cmd+i |
github.copilot.terminal.suggestCommand | 建议ç»ç«¯å½ä»¤ | ctrl+i(ä»
å¨ç»ç«¯èµ·ä½ç¨) | cmd+i |
| å½ä»¤ | 说æ | å¿«æ·é® | Mac å¿«æ·é® |
|---|---|---|---|
workbench.action.openChat.copilot | æå¼ç¼è¾å¨è天 | - | - |
| å½ä»¤ | 说æ | å¿«æ·é® | Mac å¿«æ·é® |
|---|---|---|---|
github.copilot.interactiveSession.feedback | æå¼github Issues | - | - |
github.copilot.debug.workbenchState | æ¥å¿å·¥ä½å°ç¶æ | - | - |
github.copilot.ghpr.applySuggestion | 为Github Pull Requestæä¾ä»£ç 建议 | - | - |
å¨èå¤©å¯¹è¯æ¡ä¸å¯ä»¥éè¿/å¼å¤´çå½ä»¤æ¥ä¸Copilot Chatè¿è¡äº¤äºã
| å ç´ | 说æ |
|---|---|
| - Agent | æå®Agent, 符å·ä¸º @, å¯é |
| - Commands | æå®å½ä»¤, 符å·ä¸º /, å¯é |
| - åé | å¼ç¨å
容, 符å·ä¸º #, å¯é |
| - ç¨æ·è¾å ¥çæä»¤ | å¯é |
/explain def helloworld():...
@vscode /api 请解é inlineChat.start çä½ç¨
@workspace /explain def helloworld():...
卿¯ä¸è¡ä»£ç æ«å°¾æ·»å 注éè¿è¡è§£é
| Agent | 说æ |
|---|---|
| @vscode | vscodeå½ä»¤ä¸æä»¶çé®é¢ |
| @workspace | 项ç®workspaceç¸å ³çé®é¢ |
éè¿å½ä»¤
inlineChat.start触åinline chatå使ç¨
| å½ä»¤ | 说æ |
|---|---|
| /doc | 卿¤æ·»å ææ¡£æ³¨é |
| /explain | 对éä¸ç代ç è¿è¡è§£é |
| /fix | ä¿®å¤æ¤éä¸ç代ç |
| /tests | 为éä¸ç代ç çæåå æµè¯ |
éè¿å½ä»¤ "github.copilot.interactiveEditor.generate" 触å
| å½ä»¤ | 说æ |
|---|---|
| /generate | 卿¤çæ, 该å½ä»¤æ æ³ç±ç¨æ·è¾å ¥ |
å½ç¶ä¹å¯ä»¥ç´æ¥éä¸åºåï¼ç¶åå¨inline chatä¸è¾å ¥æä»¤æ§è¡ copilotä¼å¯¹éä¸åºåè¿è¡æä»¤æä½
workbench.action.chat.openInSidebar 触å chat å使ç¨| å½ä»¤ | 说æ |
|---|---|
/api | åçvscodeæ©å±æä»¶å¼åçé®é¢ |
/explain | 对éä¸ç代ç è¿è¡è§£é |
/fix | ä¿®å¤æ¤éä¸ç代ç |
/new | å建æ°é¡¹ç®workspace |
/newNotebook | å建æ°çJupyter Notebook |
/terminal | è§£éå½ä»¤è¡éçå½ä»¤ |
/tests | 为éä¸ç代ç çæåå æµè¯ |
/help | 帮å©è¯´æ |
/clear | æ¸ é¤ä¼è¯ |
/terminalç¹æçåé, 以#å·å¼å¤´ä» å¨
/terminalå½ä»¤ä¸å¯ç¨
| åé | 说æ |
|---|---|
#terminalLastCommand | æå䏿¬¡æ§è¡çç»ç«¯å½ä»¤ |
#terminalSelection | éä¸çç»ç«¯å½ä»¤ |
æå¼ VSCode å½ä»¤é¢æ¿ï¼è¾å
¥ Preferences: Open Settings æ¥æå¼é
ç½®æä»¶ãå¨æä»¶æ¨¡å¼ä¸ï¼æ¨å¯ä»¥é
ç½®ç¸å
³åæ°ãè¦è·å宿´çåæ°è¯´æï¼è¯·æ¥ç copilot å copilot chat 两个æä»¶ç®å½ä¸ç package.json æä»¶ï¼å
·ä½ä½ç½®å¯ä»¥åè VSCode æ©å±å¸åºã
// settings.json
{
// ...
"github.copilot.chat.welcomeMessage": "always",
"github.copilot.chat.localeOverride": "zh-CN",
"github.copilot.editor.enableCodeActions": true,
"github.copilot.editor.iterativeFixing": true,
"github.copilot.editor.enableAutoCompletions": true,
"github.copilot.enable": {
"plaintext": false,
"ini": false,
"markdown": true,
"*": true
},
"github.copilot.advanced": {
"length": 4000,
"inlineSuggestCount": 5,
"top_p": 1,
"temperature": "0.8",
"listCount": 10,
"stops": {
"*": [
"\n\n\n"
],
"python": [
"\ndef ",
"\nclass ",
"\nif ",
"\n\n#"
]
},
"debug.showScores": true,
"indentationMode": {
"python": false,
"javascript": false,
"javascriptreact": false,
"jsx": false,
"typescript": false,
"typescriptreact": false,
"go": false,
"ruby": false,
"*": true
}
}
// ...
}
| è®¾ç½®åæ° | å¼ç±»å | 说æ |
|---|---|---|
"http.proxy" | string | é ç½®ç½ç»ä»£çå°å |
| è®¾ç½®åæ° | å¼ç±»å | 说æ |
|---|---|---|
"github.copilot.chat.localeOverride" | string | 设置Copilotæ¬å°è¯è¨ |
"github.copilot.chat.welcomeMessage" | string | Copilot Chat æ¯å¦æ¾ç¤ºæ¬¢è¿è¯first: ä»
ç¬¬ä¸æ¬¡å¯å¨æ¶, always: æ»æ¯, never: ä»ä¸ |
| è®¾ç½®åæ° | å¼ç±»å | 说æ |
|---|---|---|
"editor.inlineSuggest.enabled" | boolean | å¯ç¨å è建议 |
"github.copilot.editor.iterativeFixing" | boolean | å 许 Copilot æä¾è¿ä»£ä¿®å¤å»ºè®® |
"github.copilot.editor.enableAutoCompletions" | boolean | å 许 Copilot æä¾èªå¨è¡¥å ¨ |
"github.copilot.editor.enableCodeActions" | boolean | å 许 Copilot æä¾ä»£ç æä½å»ºè®®ï¼å æ¬éæåä¼å代ç ç»æãä¿®å¤é误ç |
| è®¾ç½®åæ° | å¼ç±»å | 说æ |
|---|---|---|
"github.copilot.enable" | json | è¯·å° "*": true æ¾å°æ«å°¾ è¯è¨å设置 false 表示ç¦ç¨copilot, 设置 true 表示å¯ç¨ |
github.copilot.advanced å¯ä»¥æ§å¶æ¨¡ååæ°ï¼æç»å½±åå°ä»£ç çæãå
¶å¼ä¸ºjson
| è®¾ç½®åæ° | å¼ç±»å | 说æ |
|---|---|---|
"length" | æ´æ° integer | çæä»£ç çåæ°ï¼é»è®¤ä¸º 500 |
"top_p" | æ°å number | æ§å¶æ¨¡ååéèå´ï¼é»è®¤å¼ä¸º 1ï¼èå´ä¸º 0.0~1.0 |
"temperature" | å符串 string | æ§å¶æ¨¡ååé æ§ï¼é»è®¤å¼ä¸ºç©ºï¼å¼è¶å¤§è¶ä¸å¯é¢æµï¼èå´ä¸º 0.0~1.0 |
"inlineSuggestCount" | æ´æ° integer | å
èæç¤ºç个æ°ï¼é»è®¤ä¸º 3 |
"listCount" | æ´æ° integer | Completions Panel ä¸å»ºè®®ç个æ°ï¼é»è®¤ä¸º 10 |
"stops" | JSON | æ§å¶æ¨¡å代ç çææ¶ç忢æ å¿ï¼å¯æè¯è¨æ§å¶ |
"indentationMode" | JSON | æå®è¯è¨æ¯å¦ä½¿ç¨è¯¥è¯è¨çç¼©è¿æ¨¡å¼ï¼å¯è½ä¸ stops å²çª |
"debug.showScores" | å¸å°å¼ boolean | å¨ä»£ç 建议åè¡¨ä¸æ¾ç¤ºæ¯ä¸ªå»ºè®®çåæ° |
欢è¿å¤§å®¶æ·»å æ°å å®¹ï¼æ ¡å¯¹ãéè¯¯è¯·ææ£ãð®é®ç®±: jussker@outlook.com
[1]: GitHub Copilot in VS Code
[2]: How to use GitHub Copilot: Prompts, tips, and use cases
[3]: GitHub Copilot Official Website
[4]: GitHub Copilot Series (Youtube)
[5]: Pragmatic techniques to get the most out of GitHub Copilot (Youtube)
[6]: How I used GitHub Copilot to build a browser extension
[7]: Visual Studio Code, Where are extensions installed?
[8]: Visual Studio Code, Language Identifiers