如何以编程方式调用Github Copilot?

7

我目前正在探索 GitHub Copilot,并且有兴趣以编程方式使用它,即通过代码调用它。据我了解,GitHub Copilot是一个IDE插件,这让我想知道如何以自动化或编程方式对其进行控制。我们知道Copilot在幕后使用OpenAI模型作为LLM。

GitHub Copilot不提供API访问以便以编程方式进行控制。

澄清:

  • 重要的是要注意,一旦下载和安装了插件,它会自动完成我的代码。Copilot在幕后使用了OpenAI模型,如gpt-3.5或gpt-4。我非常熟悉OpenAI的聊天或文本补全模型。所以这不是我的问题

  • 我的问题是如何以自动化方式捕获Copilot提供的前三个建议

  • 例如,对于任何给定的自动补全任务给Copilot,任务是记录代码建议并将其保存到文件中。


你是什么意思?一旦你下载它,它会自动补全你的代码。难道它对你没有这样做吗?我猜,为了清楚起见,请详细说明你的问题。谢谢。 - jsibs
你是什么意思?一旦你下载它,它会自动补全你的代码。它对你来说不是这样做的吗?我猜,为了清楚起见,请详细说明你的问题。谢谢。 - undefined
你有没有看过 https://github.com/github/copilot.vim 上的 Vim 插件?它似乎通过 JSON-RPC API 调用了一个 LSP。代码并不是很容易理解,但我认为这是一个不错的起点。 - Ingo
@Ingo 最有希望的行是这个这个。我在这方面真的很迷茫,所以分享出来看看是否有人能弄清楚这些东西。 :^) - doneforaiur
@lngo你提供的参考是一个使用Codex/GPT API的社区实现。我的问题是,我如何捕捉Copilot提供的前三个建议? - Exploring
1个回答

1

GitHub,截至目前还没有公开发布他们的API。

然而,有人猜测GitHub Copilot使用了OpenAI的Codex(现已弃用)。根据this所说,您可以使用OpenAI的聊天模型进行代码补全、建议等。不过根据我的经验,响应时间会有所不同。另外,并不能保证它只会输出代码。

请参考下面的示例;

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {
     "role": "system",
     "content": "You are a helpful assistant. Assistant will output only and only code as a response."
    },
    {
      "role": "user",
      "content": "Write a Python function that takes as input a file path to an image, loads the image into memory as a numpy array, then crops the rows and columns around the perimeter if they are darker than a threshold value. Use the mean value of rows and columns to decide if they should be marked for deletion."
    }
  ],
  temperature=0,
  max_tokens=1024
)

这将输出:

import numpy as np
from PIL import Image

def crop_dark_borders(image_path, threshold):
    # Load the image
    image = Image.open(image_path)
    # Convert the image to a numpy array
    image_array = np.array(image)
    
    # Calculate the mean value of each row and column
    row_means = np.mean(image_array, axis=1)
    col_means = np.mean(image_array, axis=0)

    ...

编辑;再想一想,我不会在这种情况下使用ChatCompletion,因为任务根本不是基于聊天的。相反,我会使用Completion,并将整个代码文件作为输入提供给它。这也有自己的局限性。例如,您将无法向模型提供光标后面的内容。

然而,这种方法无法捕获GitHub Copilot提供的代码完成建议。这里的代码片段仅仅演示了如何调用OpenAI的API。我的要求是记录GitHub Copilot插件提供的实时建议。 - Exploring
@Exploring 你试过通过代理运行你的IDE请求吗?这样所有的copilot API请求都会被记录下来。然后你可以编写自己的API封装器,从GitHub获取自动补全功能。 - Mave
@Mave,就是在做那个。虽然这样可能很快就会被封禁,但我认为并不是每次按键都会触发最佳建议。 - doneforaiur
@Exploring,你的需求还不够清楚。调用扩展,调用API,记录实时建议,这些都是不同的任务。我目前正在调查如何访问API,可以吗? - doneforaiur
1
做了一些调查。对我来说,捕获数据包是行不通的,无法解密TLS。所以我检查了neovim的Copilot支持。他们提到要安装Nodejs,这很奇怪。然后我找到了一个自定义插件LSP-Copilot,它需要你安装LSP,LSP使用JSON-RPC与LSP-Copilot进行通信(对于neovim也是一样)。浏览了一下LSP-Copilot的源代码,看起来很有前途。分享这个是因为也许有人能帮上忙。 - doneforaiur
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接