概述

"GitHub 副驾驶” 以半自动生成日文源代码。
另外,在尝试了一段时间后,我整理了 Copilot 的使用场景。

什么是副驾驶

2020 年 5 月 Elon Musk 等人参与的 AI 非营利组织开放式人工智能通过自然语言模型GPT-3已宣布。这个模型在当时成为了一个热门话题,因为它非常准确,以至于无法区分生成的文本是由人类编写的还是由 AI 编写的。

OpenAI 定制 GPT-3,从自然语言生成源代码的 Codex 模型正在开发OpenAI 和 Github 合作伙伴通过这样做,可以学习在 Github 上发布的数十亿行代码,并生成更高精度的源代码。

并且在 2021 年 6 月 29 日,Github 将发布“开发支持功能”GitHub 副驾驶”宣布。
OpenAI Codex 的使用受限于它在 API 中的使用,但 GitHub Copilot 可以作为插件添加到开发环境中,如下所示,使用户更容易使用。

■ Copilot 兼容的开发环境

  • Neovim
  • JetBrains IDE
  • 视觉工作室
  • Visual Studio 代码

Github Copilot 的费用在前 60 天是免费的,之后您将不得不从以下两个付费计划中进行选择。

■ 合同计划

  • 10 美元/月
  • 100 美元/年

试用环境

这次自动生成源代码的环境如下图所示。
执行环境为基于Windows11构建的WSL2/Ubuntu20.04。
在 Windows 11 上视觉工作室代码安装扩展“GitHub 副驾驶”和“WSL”。 (下面的“1.”和“2.”)

通过添加“GitHub Copilot”,在 GitHub 认证后GitHub 副驾驶您将能够与(下图中的“3.”)
如果你给一个句子,源代码会自动呈现(建议)。这个提供的源代码是开放式人工智能法典模型用来。 (下面的“3.”到“6.”)

尽管它与 Copilot 无关,但您可以通过在 Visual Studio Code 中添加“WSL”来控制 WSL 中的文件。

自动生成的图像

在 Visual Studio Code 中自动生成源代码非常简单。
基本上就等吧。如果您输入一两个字符,Copilot 会显示一些源代码。在某些情况下,它甚至会建议它,而无需您输入任何内容。

比如下图输入“import”,等待1秒左右,就会出现代码“requests”。
这个接受内容的 Tab 键
GitHub Copilotの威力(日本語からソースコード自動生成)
如果您使用 Tab 接受它并换行,它现在将自动向您显示下一行代码。
按 T​​ab 接受显示的代码“从 requests_oauthlib 导入 OAuth1Session”。
GitHub Copilotの威力(日本語からソースコード自動生成)
换行后,再次呈现以下代码。
GitHub Copilotの威力(日本語からソースコード自動生成)
在另一个换行符之后,再次呈现下一个代码。
GitHub Copilotの威力(日本語からソースコード自動生成)
反复呈现。
GitHub Copilotの威力(日本語からソースコード自動生成)
这样,Copilot 只需重复 Tab 和换行即可自动生成源代码这是。

此外,当出现时,“Ctrl+Enter如果按“,它将在一定范围内呈现。
例如,如果在出现“requests”时按“Ctrl + Enter”,则会出现如下图所示的10种源代码模式。
您要选择的图案。接受解决方案” 来编写所有代码。
GitHub Copilotの威力(日本語からソースコード自動生成)

审判

现在让我们更实际地开发它。
这次,在 Visual Studio Code 中输入 3 行注释以自动生成代码我会尽力。
提前确保文件名是 .py 和 Python。 (Copilot 支持 Python 以外的语言,但是 Python 的建议采纳率似乎高达 40%。)

在评论文本中输入你要开发的内容
# ニュースサイトをクローリングして、時系列順にAIのキーワードを抽出する。
# 抽出したキーワードからWordCloudを作成する。
# 作成したWordCloudをTwitterに投稿する。

结果大约是源代码的基础仅使用 Tab 和换行符.
下面是提供的源代码的片段。

它是用于发布到 Twitter 的各种键的设置。它旨在从操作系统环境变量中获取。
注意,注释行也会自动生成。

建议示例 1
# Twitter APIのキーを設定
CK = os.environ['CK']
CS = os.environ['CS']
AT = os.environ['AT']
AS = os.environ['AS']

指定要抓取的站点的 URL。

建议示例 2
# ニュースサイトのURLを設定
URL = 'https://www3.nhk.or.jp/news/easy/k10011852901000/k10011852901000.html'

仿佛”爬行很容易,很容易!”,使用 BeautifulSoup 的过程很快就生成了。

建议示例 3
# ニュースサイトをクローリングして、本文を取得する
def get_news_text(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'html.parser')
    news_text = soup.find('div', class_='text').text
    return news_text

接下来,使用 Mecab 仅提取关键字。
"我也擅长自然语言。好像在说。

建议示例 4
# 本文からAIのキーワードを抽出する
def get_ai_keywords(text):
    # 形態素解析
    tagger = MeCab.Tagger('-Ochasen')
    tagger.parse('')
    node = tagger.parseToNode(text)
    keywords = []
    while node:
        # 品詞が名詞、動詞、形容詞の場合にキーワードとして抽出
        if node.feature.split(',')[0] in ['名詞', '動詞', '形容詞']:
            keywords.append(node.surface)
        node = node.next
    # キーワードをカウント
    keywords_count = {}
    for keyword in keywords:
        if keyword in keywords_count:
            keywords_count[keyword] += 1
        else:
            keywords_count[keyword] = 1
    # キーワードを降順に並び替え
    keywords_count = sorted(keywords_count.items(), key=lambda x:x[1], reverse=True)
    return keywords_count

而且,”WordCloud 已经是老技术了,但也无可奈何有人告诉我,

# 抽出したキーワードからWordCloudを作成する
def create_wordcloud(keywords_count):
    # フォントを設定
    font_path = '/usr/share/fonts/truetype/fonts-japanese-gothic.ttf'
    # マスク画像を設定
    mask = np.array(Image.open('mask.png'))
    # WordCloudを作成
    wordcloud = WordCloud(background_color='white', font_path=font_path, mask=mask)
    wordcloud.generate_from_frequencies(dict(keywords_count))
    # WordCloudを保存
    wordcloud.to_file('wordcloud.png')

最后,我在推特上发文说:“是的。起床!”是感觉。

# WordCloudをTwitterに投稿する
def post_wordcloud():
    # 画像を読み込む
    files = {'media[]': open('wordcloud.png', 'rb')}
    # ツイート本文を設定
    text = 'AIのキーワードを抽出したWordCloudです。'
    # Twitterに投稿
    twitter = OAuth1Session(CK, CS, AT, AS)
    url = 'https://upload.twitter.com/1.1/media/upload.json'
    req_media = twitter.post(url, files=files)
    if req_media.status_code != 200:
        print('画像のアップロードに失敗しました。')
        sys.exit()
    media_id = json.loads(req_media.text)['media_id']
    url = 'https://api.twitter.com/1.1/statuses/update.json'
    params = {'status': text, 'media_ids': media_id}
    req_media = twitter.post(url, params=params)
    if req_media.status_code != 200:
        print('ツイートに失敗しました。')
        sys.exit()
    print('ツイートしました。')

调用到目前为止创建的函数的主进程也是自动创建的。

def main():
    # ニュースサイトをクローリングして、本文を取得する
    text = get_news_text(URL)
    # 本文からAIのキーワードを抽出する
    keywords_count = get_ai_keywords(text)
    # 抽出したキーワードからWordCloudを作成する
    create_wordcloud(keywords_count)
    # WordCloudをTwitterに投稿する
    post_wordcloud()

if __name__ == '__main__':
    main()

然而,因为它被呈现为永恒人类必须决定何时退出.
最后,我做了一些调试,并能够让它创建一个像下面这样的 WordCloud。

  • 结果示例 1
    人工智能新闻网站编。爱生成的 AI 关键字
    GitHub Copilotの威力(日本語からソースコード自動生成)
  • 结果示例 2
    人工智能新闻网站w 的爱。爱生成的 AI 关键字
    GitHub Copilotの威力(日本語からソースコード自動生成)

Copilot使用场景

经过一段时间的尝试,我按照自己的方式整理了 Copilot 的使用场景。

使用 Copilot 的好时机

分配 物品 评估
1 设计 -
2 编码
3 测试 -
4 调试

Copilot 可用于以下开发过程:编码时什么时候调试时我认为。
编码时我不必做太多事情因此,想都没想就评价为“◎”。
人类从调试开始就开始发挥作用,Copilot 在调试时的威力非凡我感觉到了。
这里有三个例子。

调试示例 1

只需键入“# 进行调试”即可显示程序中变量的内容,如下图所示。自动生成调试语法他给我(红框)
副驾驶考虑到前一阶段关键字相关的处理它会给你调试语句。老实说,我猜到了我想要展示的东西,我的心被揭示我感觉到了。
GitHub Copilotの威力(日本語からソースコード自動生成)

调试示例 2

还有,我用BeautifulSoup中的find函数获取不到我想要的数据,所以我用find_all函数重写了,但是不知道返回值news_text的类型,也不知道怎么指定打印语句。在这种情况下,只需键入“print”和剩余的变量名称“new_text[0].text”等。包含数组元素的自动完成变量他给我逐个,它为您省去了在网络上搜索或参考文档的麻烦,使其变得非常容易。曾是。
GitHub Copilotの威力(日本語からソースコード自動生成)

调试示例 3

另外,数组类型的变量很难用,所以想把它转成文本。
轻松呈现因编程语言而略有不同的令人困惑的数组操作他们会为你做的。
GitHub Copilotの威力(日本語からソースコード自動生成)

可以使用 Copilot 的人,不能使用 Copilot 的人

分配 物品 评估
1 编程语言不熟练
2 初级到高级
3 挑剔的学校

许多人可以从 Copilot 中受益我认为。
即便你对编程语言的了解在 20% 左右,大部分都会由 Copilot 自动生成。没错,有了人工智能结对编程是。 (初学者◎)

即使完全不懂语言也无法调试,也可以请熟悉该语言的人调试,比从头问容易多了。短期,低预算应该可以外包。 (没有经验○)

当然,即使你是100%懂语言的高级用户,Copilot 的生产力非常高因为应该是将底座留给 Copilot,由人工修复您关心的部分我觉得你应该。 (进阶◎)

相反,我的对源代码有讲究的人,你可能会觉得 AI 提供的源代码不是你喜欢的。就算AI呈现出来,最后也是基于GitHub上的源码组呈现出来的,所以有可能会陆续呈现不同思路的编码。

例如,当将“a + b”分配给新变量“x”这是一个建议,但在某些时候用 'a+b' 代替 'a' 而不使用新变量可能会出现建议等细微差异,失去了整个源代码的统一感您可以。
如果您不喜欢这种行为并想自己编写代码,那么它可能不适合您。 (精选组△)

副驾驶演示示例 1
 x = a + b
副驾驶演示示例 2
 a += b

Copilot适合的开发,不适合的开发

分配 物品 评估
1 研究相关
2 敏捷开发
3 关键任务 ×
4 最先进的技术开发

考虑到 Copilot 是从 GitHub 上的源代码中推荐的,有很多具有强大研究元素的源代码我猜不是。为此原因,源代码有一些错误我们不能否认这种可能性。
即使对于这样的源代码也考虑可接受的开发,同样研究相关发展或者可以通过敏捷试错法开发的项目我认为这是合适的。

另一方面,关键任务系统开发我不认为它适合
不应该停止的社会重要系统(交通设施,金融机构等)需要高质量的程序,所以我认为错误处理可能内置于万无一失和故障安全的意识。但是,在源代码中副驾驶缺乏详细的错误处理我认为这是很有可能的。或者,需要高速处理的系统需要注重性能的编码。现在判断 Copilot 的演示是最好的还为时过早我认为。像这样如果需要高质量的程序,使用 Copilot 是有风险的你可以考虑一下。

此外,如果您想使用最新的技术,您很可能无法提供所需的源代码。
当然,可以在评论中指定展示最新的技术,但如果在 GitHub 上注册的源代码很小,则有限制。

其它功能

这是 Copilot 规范的一个功能,但是当似乎没有什么可以呈现时,可以从过去呈现的历史呈现看起来。
也许,当人类给出的句子太少而无法知道要呈现什么时,它的行为就会像这样。

想法

我想在 60 天的试用期内使用 Copilot,但我根本没有时间,所以我最终每月尝试一次。
事实上,就我而言,大致十分之一的编码时间我认为这是关于
本来想辞职的,但是节省大量时间我认为一旦你尝到了这种兴奋,就退出是一种耻辱。
如果只是在想做点什么的时候临时使用的话,从性价比上来说就足够了我想。

补充

下面是 Copilot 创建的文件和我调试的文件。

https://github.com/artisanbaggio/Copilot_test.git
"test_only_copilot.py" ←仅由 Copilot 生成的源代码。它不会按原样工作。
“test_only_copilot_human.py” ←我修改了 Copilot 的源代码。有效,但不如在 Twitter 上发帖。

参考网站

GitHub 副驾驶
OpenAI 法典

感谢您阅读以上所有内容。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308628797.html

相关文章: