0%

copilot使用指导

其实在上学期(2022年9月)我就成功申请了github学生认证, 拿到了免费使用copilot的机会. 但是那时copilot还不支持在代理服务器上使用, 于是体验AI编程的想法被搁置. 昨天心血来潮尝试了一下, 发现可以用代理服务器连接copilot了, 于是迫不及待开始学习体验

快捷键

Copilot 也提供了一些快捷键,可以很方便地使用。

  • 接受建议:Tab
  • 拒绝建议:Esc
  • 打开Copilot:Ctrl + Enter (会打开一个单独的面板,展示10个建议)
  • 下一条建议:Alt/Option + ]
  • 上一条建议:Alt/Option + [
  • 触发行内Copilot:Alt/Option + \ (copilot还没有给出建议或者建议被拒绝了,希望手工触发它提供建议)

HTTP代理

有些用户(几乎所有中国大陆用户)可能会遇到连接不上的问题, 报错信息 GitHub Copilot could not connect to server. Extension activation failed: "connect ETIMEDOUT xxx.xxx.xxx:443"

对于中国大陆用户, 首先你要有一个代理软件, 在设置中找得到代理地址和端口. 比如 127.0.0.1:7890

然后打开VSCode的设置, 搜索 http.proxy, 输入 127.0.0.1:7890(你的代理地址和端口)

然后就可以啦

copilot使用场景

解决算法问题

你可以先写出函数头, 然后在注释中解释函数的作用, 传入的参数和返回的参数, 然后copilot可以自动帮你生成代码

# 使用heap sort对数组排序                          (自己写的)
# 1. 将数组转换为最大堆
# 2. 将最大堆的根节点与最后一个节点交换
# 3. 将剩余的节点重新构造为最大堆
# 4. 重复2,3步骤直到剩余节点数为1
def heap_sort(arr):                              #(自己写的)   
    n = len(arr)
    # 将数组转换为最大堆
    for i in range(n//2-1, -1, -1):
        heapify(arr, n, i)
    # 将最大堆的根节点与最后一个节点交换
    # 将剩余的节点重新构造为最大堆
    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]
        heapify(arr, i, 0)
    return arr

def heapify(arr, n, i):							 #(自己写的)
    # 将数组转换为最大堆
    # n: 数组长度
    # i: 当前节点索引
    largest = i
    l = 2*i + 1
    r = 2*i + 2
    if l < n and arr[l] > arr[largest]:
        largest = l
    if r < n and arr[r] > arr[largest]:
        largest = r
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)
# 编写5组测试数据并进行测试                      #(自己写的)
test_data = [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
]
for data in test_data:
    print(heap_sort(data))

可以看到, 在这个样例中, 50行代码, 我只写了四行注释, 其他代码和注释还有测试样例都是一直按 Tab键生成的, 不要太爽

写注释

在行数上面一行写下 /**, copilot可以自动为你写下注释

# 使用heap sort对数组排序
# 1. 将数组转换为最大堆
# 2. 将最大堆的根节点与最后一个节点交换
# 3. 将剩余的节点重新构造为最大堆
# 4. 重复2,3步骤直到剩余节点数为1

   /**
    * @param {number[]} nums
    * @return {number}
    */

def heap_sort(arr):
    n = len(arr)
    # 将数组转换为最大堆
    for i in range(n//2-1, -1, -1):
        heapify(arr, n, i)
    # 将最大堆的根节点与最后一个节点交换
    # 将剩余的节点重新构造为最大堆
    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]
        heapify(arr, i, 0)
    return arr

 /**
    * @param {number[]} arr
    * @param {number} n
    * @param {number} i
    * @return {number}
    */
  
def heapify(arr, n, i):
    # 将数组转换为最大堆
    # n: 数组长度
    # i: 当前节点索引
    largest = i
    l = 2*i + 1
    r = 2*i + 2
    if l < n and arr[l] > arr[largest]:
        largest = l
    if r < n and arr[r] > arr[largest]:
        largest = r
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)
# 编写5组测试数据并进行测试
test_data = [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
]
for data in test_data:
    print(heap_sort(data))

lol 但是python的注释语法貌似不是 /**

Hope you have fun with copilot!