首页 > 其他分享 >❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记

❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记

时间:2023-08-16 10:14:14浏览次数:55  
标签:文件 片段 GitHub prompt Jaccard 模型 Copilot 读心术

总览

你是否好奇 GitHub Copilot 如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过。这篇文章记录了我阅读一个对 Copilot 的逆向工程的笔记,一言以蔽之,Copilot 使用了 Jaccard 相似度获取用户最近访问过的页面里与当前编辑内容最相似的代码片段,并将其作为注释内容加入 prompt 中送给代码生成模型,以下是更加展开的讲解:

总体来说,copilot 分为两个部分:

  • 客户端:VS Code 扩展收集你键入的任何内容,拼装成 prompt,并将其发送到类似 Codex 的模型。无论模型返回什么,它都会显示在编辑器中。
  • 模型端:类似 Codex (现在或许是更先进的版本)的模型接受提示并返回完成提示的建议。

prompt 工程

prompt 示例

先看一个拼装好的 prompt 示例:

{
  "prefix": "# Path: codeviz\app.py\n# Compare this snippet from codeviz\predictions.py:\n# import json\n# import sys\n# import ti...,
  "suffix": "if __name__ == '__main__':\r\n    app.run(debug=True)",
  "isFimEnabled": true,
  "promptElementRanges": [
    { "kind": "PathMarker", "start": 0, "end": 23 },
    { "kind": "SimilarFile", "start": 23, "end": 2219 },
    { "kind": "BeforeCursor", "start": 2219, "end": 3142 }
  ]
}
  • 一个实际的案例如上图所示

    • 如果有后缀(suffix), 那么会启用插入模式 (模型使用 fill-in-middle 任务的 prompt),否则就是向后补全的模式

      • 根据 codex 官方:插入模式需要使用特殊 token 组装成正确的 prompt 格式,需要更大的 max_length,需要较大温度多采样几次直到 stop_reason 是 'stop',以便更好地连接到后缀代码
    • 可以看到,前缀(prefix)中除了当前光标之前的文档内容,还包含着项目中另一个文件的代码,该 # Compare this snippet from codeviz\\predictions.py: 行及其后续行指代的是与当前文档内容相似的代码片段。模型也就是通过这些相似片段加深对代码上下文的理解https://thakkarparth007.github.io/copilot-explorer/posts/prompt-full

标签:文件,片段,GitHub,prompt,Jaccard,模型,Copilot,读心术
From: https://www.cnblogs.com/qftie/p/17633227.html

相关文章

  • Github账号开启账号双重验证
    原文:Github开启双重验证-Stars-One的杂货小窝今天在浏览开源项目的时候,突然Github有个提示我要在9月18日前开启双重验证,说是不完成的话,到时候的Github账号会受到限制于是花了些时间研究了下,通过百度搜索也看到了有篇文章说到这事,今年Github要在年底前限制必须所有账......
  • 字节码的终极应用-GitHub高星开源APM项目之Pinpoint
    大家好,我们前面的章节javaagent以及一些字节码修改框架ASM和Javassist,以及他们的一些简单的应用场景.今天重点给大家介绍一款github上开源的APM分布式链路监控产品--Pinpoint.Pinpoint是什么?Pinpoint是一个开源的APM(ApplicationPerformanceManagement/应用性能管理......
  • centos安装arp-scan,使用github上的源码安装
    使用github上的源码安装按照以下步骤使用arp-scan的GitHub源码进行安装:安装编译工具和依赖项:打开终端并以root用户或具有sudo权限的用户身份登录。运行以下命令以安装编译工具和必要的依赖项:sudoyuminstallgccmakelibpcap-devel下载源代码:在终端中,使用以下命令......
  • github显示不正常解决办法
    有的时候github页面打开排版不正常,F12打开开发者模式发现很多资源文件没有加载出来,通过修改hosts文件进行解决首先在网站网址查询上面分别输入以下网址github.comgithub.githubassets.com查询到对应的ip,然后在文件夹C:\Windows\System32\drivers\etc中的hosts文件中添加对应的......
  • 免费拥有自己的 Github 资源加速器
    TurboHub是一个免费的Github资源加速下载站点,可以帮助你快速下载Github上的资源。其核心逻辑是通过AzureStaticWebApps服务和AzureFunctions服务,将Github上的资源通过中间服务器进行转发,从而实现加速下载的目的。由于每个使用Azure的用户都可以免费的额度部署A......
  • 解决Mac 上码云gitee或者github出现The requested URL returned error: 403
    出现场景要把某个项目push到码云上,已经设置了仓库地址,在最后一步直接报错。adodeMacBook-Pro:yimabaoado$gitpush--set-upstreamoriginmasterremote:[session-774b45b9]Accessdeniedfatal:unabletoaccess'https://gitee.com/mzmilk/yimabao.git/':Therequested......
  • 问题记录 <git push 到 github 时遇到 ssh 端口问题>
    问题描述gitpush时遇到如下问题:ssh:connecttohostgithub.comport22:Connectiontimedoutfatal:Couldnotreadfromremoterepository.解决方式通过修改端口得以解决,将22端口改为443,添加~/.ssh/config内容如下:Hostgithub.comHostnamessh.github.com......
  • github 无语的问题,Host does not existfatal: Could not read from remote repository
    Unabletoopenconnection:Hostdoesnotexistfatal:Couldnotreadfromremoterepository.image.pngimage.pngimage.pngPleasemakesureyouhavethecorrectaccessrightsandtherepositoryexists.如果githubdesktop和gitpu......
  • Github编辑TOC目录
    任意1-6个#标注的标题都会被添加上同名的锚点链接 [标题1](#标题1) [标题2](#标题2) [标题3](#标题3) #标题1 ##标题2 ###标题3锚点跳转的标识名称,可使用任意字符,大写字母要转换成小写 [Github标题1](#github标题1) ###Github标题1多单词锚点的空格用-......
  • github
    https://github.com/hckingking/ githubhttps://github.com/godvking 府头邦 Git是由Linux之父LinusTovalds为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。Git是一个管理你的「代码的历史记录」的工具。 https://hckingking.github.io/ 博客 h......