2021 年のGitHub Copilot のプレビューは、 ソフトウェア開発分野における生成 AI ツールの可能性をすでに実証しました。 2 年後、Copilot はますます改良され、コストがかかり (個人の場合でも)、競争にも直面しています。

後者は、 生成 AIに基づくコーディング アシスタントの適用範囲の大幅な拡大にもつながりました。そして、私たちのテストが示すように、ツールはコードを生成するだけではないこともできるようになりました。

テスト中の開発者向け第 3 世代 AI ツール

まず、この記事でテストした Gen-AI コーディング ツールの概要を説明します。

  • Amazon CodeWhisperer は、「コーディング コンパニオン」として Copilot と直接競合します。このツールは Visual Studio Code および JetBrains IDE とも統合されており、既存のコードに基づいたコメントや補完に応じてコードの提案を生成します。 Amazon ツールを使用すると、セキュリティ上の問題を発見することもできます。 CodeWhisperer は 5 つのプログラミング言語を包括的にサポートし、程度は低いもののさらに 10 のプログラミング言語をサポートします。オプションで、CodeWhisperer はコードにフラグを立ててログに記録することと、オープンソースのトレーニング データに似たコード提案をフィルタリングすることができます。

  • Google Bard は、大規模言語モデル LaMDA (Language Model for Dialogue Applications) への Web ベースのインターフェイスを表し、プログラミング タスクと関連トピックのサポートを提供できるようになりました。 Bard がオープンソース ライセンスの対象となる可能性のあるコードをリリースする場合は、ソースと関連情報が含まれます。さらに、吟遊詩人はコードを説明することもできます。

  • GitHub コパイロットCopilot X の機能にアクセスするには、現在 Copilot サブスクリプションが必要です。これにより、待機リストに登録されるようになります (私たちの場合、参加に招待されるまでに約 4 週間かかりました)。

ツールのテスト方法

このテストでは、テストした 3 つのGen-AI コーディング ツールに、さまざまな基準を考慮して Infoworld.com 上の記事をリストするという、もう少し複雑なスクレイピング タスクを実行しました。それぞれのツールには概要が記載されていますが、追加のヘルプはありません。コードの説明をサポートするツールでは、MIT のコンピューター サイエンス入門コースのPython コード例を試すこともできました。

テストされた生成 AI コーディング ツールの概要:

Scrape infoworld.com front page:

Open https://www.infoworld.com/

Find all articles by looking for links with 'article' in the href; extract title, author, date from each

List all articles alphabetically by title; eliminate duplicates

List all articles alphabetically by author last name

List all articles latest first

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

Amazon コードウィスパラー

コードの生成に関しては、Amazon CodeWhisperer はさまざまな方法で開発者をサポートできます。詳細とビデオチュートリアル、および包括的なドキュメントについては、 アマゾン ウェブ サービスのリソース ページを参照してください。

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

Amazon によると、CodeWhisperer の基礎となる大規模言語モデル(LLM) は、数十億行のコード (Amazon 所有のコードとオープンソースの両方) でトレーニングされました。たとえば、これにより AI コーディング ツールは、コメントに基づいてだけでなく、直接のコード コンテキスト (IDE で開かれている他のコンテンツ) も考慮してコードの提案を行うことができます。さらに、CodeWhisperer は、Python、Java、および JavaScript コードのセキュリティ脆弱性をチェックし、それらを修正するための対策を提案することができます。これに必要な脆弱性のデータとリストは、特に OWASP やさまざまなベスト プラクティスから得られます。

CodeWhisperer は、次の言語でコードを最も確実に生成します。

これらはトレーニング データ コーパスで最も頻繁に使用されました。程度は低いですが、CodeWhisperer は以下についてもトレーニングされています。

次のツイートは、CodeWhisperer が日常生活で開発者をどのようにサポートできるかについての簡単な概要を示しています。

以下は、冒頭に示した概要に基づいて CodeWhisperer によって生成されたコードのスクリーンショットです。

残念ながら、コード出力は機能しません。CodeWhisperer は、多かれ少なかれ同じ目的のために複数の関数を提供しました。しかし、Amazon の Generative AI ツールは実用的なソリューションに近づいていました。細部までこだわりました(キーワード: 美しいスープ)。

テストの一環として、プロジェクトのセキュリティ スキャンも実施しました。驚いたことに、CodeWhisperer スキャンでは別のファイル (GitHub Copilot X によって生成された) でリソース リークが見つかりましたが、問題は発見されませんでした。

このファイルはオープン ソース参照をトリガーしませんでしたが、CodeWhisperer リファレンス ログには、CodeWhisperer がそのような参照を含むコードを提案するかどうかを制御する設定へのリンクがあります。私たちが調べた Amazon の例では、参照付きのコード提案にライセンス タイプが表示されていました。

Amazon CodeWhisperer – 結論

CodeWhisperer は IDE でコードを生成し、セキュリティ チェックを実行しますが、チャット ウィンドウやコードの説明がありません。このツールは宣伝どおりに機能し、個人の開発者は無料で利用できます。企業は GitHub Copilot と同じ月額 19 ドルを支払います。

グーグル吟遊詩人

Google の Bard も2023 年 4 月末からプログラマーを支援しています。 Bard 自身の声明によると、Bard は次のプログラミング言語をサポートしています。

  • C++

  • 行く

  • ジャワ

  • JavaScript

  • パイソン

  • TypeScript

  • C#

  • PHP

  • ルビー

  • 迅速

  • コトリン

  • さび

  • ジュリア

  • R

  • ハスケル

  • エアランゲン

  • スカラ座

  • ルア

  • OCaml

  • スキーム

Bard は、これらの言語でコードを生成、デバッグ、説明できます。さらに、Google の開発者向け Generative AI は、あるプログラミング言語から別のプログラミング言語に翻訳することもできます。

サイト スクレーパーのコード生成は、一見すると比較的信頼できるものに見えましたが、詳しく調べてみると、いくつかの問題がありました。ダブルクリックするだけでColabでコードが開きましたが、実行しようとするとタイプ エラーが発生しました。問題を修正する代わりに、コード生成を再度実行しました。結果はもう少し意味のあるものになりました。ただし、Colab でコードを実行しようとすると、属性エラーがスローされました。このトレースバックが Bard に返された後、ツールは修正を提供しましたが、その結果、別の場所で型エラーが発生しました。

以下は、InfoWorld.com スクレーパー用に Bard によって生成されたコードです。

import requests

from bs4 import BeautifulSoup

def scrape_infoworld():

"""Scrape the InfoWorld front page and return a list of articles."""

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

# Get the HTML from the InfoWorld front page.

response = requests.get("https://www.infoworld.com/")

soup = BeautifulSoup(response.content, "html.parser")

# Find all articles by looking for links with 'article' in the href.

articles = soup.find_all("a", href=lambda x: "article" in x["href"])

# Extract the title, author, and date from each article.

article_data = []

for article in articles:

title = article.find("h3").text

author = article.find("span", class_="byline").text

date = article.find("time").text

article_data.append({

"title": title,

"author": author,

"date": date,

})

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

# Sort the articles alphabetically by title.

article_data.sort(key=lambda x: x["title"])

# Remove any duplicate articles.

article_data = list(set(article_data))

# Sort the articles alphabetically by author last name.

article_data.sort(key=lambda x: x["author"].split()[-1])

# Sort the articles latest first.

article_data.sort(key=lambda x: x["date"], reverse=True)

return article_data

if __name__ == "__main__":

articles = scrape_infoworld()

# Print the articles.

for article in articles:

print(article)

Explanation:

This code will first get the HTML from the InfoWorld front page. Then, it will find all articles by looking for links with 'article' in the href. For each article, it will extract the title, author, and date. The articles will then be sorted alphabetically by title, removed of any duplicates, sorted alphabetically by author last name, and sorted latest first. Finally, the articles will be printed.

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

そして、実行時の結果は次のとおりです。

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in () in ()

39

40 if __name__ == "__main__":

---> 41 articles = scrape_infoworld()

42

43 # Print the articles.

6 frames

in (x) in (x)

10

11 # Find all articles by looking for links with 'article' in the href.

---> 12 articles = soup.find_all("a", href=lambda x: "article" in x["href"])

13

14 # Extract the title, author, and date from each article.

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

TypeError: string indices must be integers

ソースとプログラム コードの説明に関しては、バードはテストでより良いアイデアを提示しました。 MIT コード例に関する彼の説明が非常に優れていたため、これが彼のトレーニング データの一部ではないかと疑うほどでした。提供されるコードは次のとおりです。

import pylab, random

class Stock(object):

def __init__(self, price, distribution, vol):

self.price = price

self.history = [price]

self.distribution = distribution

self.vol = vol

self.lastChangeInfluence = 0.0

def setPrice(self, price):

self.price = price

self.history.append(price)

def getPrice(self):

return self.price

def makeMove(self, bias, mo):

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

oldPrice = self.price

baseMove = self.distribution(self.vol) + bias

self.price = self.price * (1.0 + baseMove)

self.price += mo*random.choice([0.0, 1.0])*self.lastChangeInfluence

self.history.append(self.price)

change = self.price - oldPrice

if change >= 0:

self.lastChangeInfluence = min(change, oldPrice*0.01)

else:

self.lastChangeInfluence = max(change, -oldPrice*0.01)

def showHistory(self, fig, test):

pylab.figure(fig)

pylab.plot(self.history)

pylab.title('Closing Prices, Test ' + test)

pylab.xlabel('Day')

pylab.ylabel('Price')

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

class SimpleMarket(object):

def __init__(self, numStks, volUB):

self.stks = []

self.bias = 0.0

for n in range(numStks):

volatility = random.uniform(0, volUB)

distribution = lambda vol: random.gauss(0.0, vol)

stk = Stock(100.0, distribution, volatility)

self.addStock(stk)

def addStock(self, stk):

self.stks.append(stk)

def setBias(self, bias):

self.bias = bias

def getBias(self):

return self.bias

def getStocks(self):

開発者向けの生成 AI ツール: CodeWhisperer、Bard、Copilot X のテスト中

return self.stks[:]

def move(self, mo):

prices = []

for s in self.stks:

s.makeMove(self.bias, mo)

prices.append(s.getPrice())

return prices

class Market(SimpleMarket):

def __init__(self, numStks, volUB, dailyBiasRange):

SimpleMarket.__init__(self, numStks, volUB)

self.dailyBiasRange = dailyBiasRange

def move(self, mo):

prices = []

for s in self.stks:

s.makeMove(self.bias + dailyBias, mo)

prices.append(s.getPrice())

return prices

def simMkt(mkt, numDays, mo):

endPrices = []

for i in range(numDays):

vals = mkt.move(mo)

vals = pylab.array(vals)

mean = vals.sum()/float(len(vals))

endPrices.append(mean)

return endPrices

def plotAverageOverTime(endPrices, title):

pylab.plot(endPrices)

pylab.title(title)

pylab.xlabel('Days')

pylab.ylabel('Price')

def plotDistributionAtEnd(mkt, title, color):

prices = []

sumSoFar = 0

for s in mkt.getStocks():

prices.append(s.getPrice())

sumSoFar += s.getPrice()

mean = sumSoFar/float(len(prices))

prices.sort()

pylab.plot(prices, color)

pylab.axhline(mean, color = color)

pylab.title(title)

pylab.xlabel('Stock')

pylab.ylabel('Last Sale')

pylab.semilogy()

def runTrial(showHistory, test, p):

colors = ['b','g','r','c','m','y','k']

mkt = Market(p['numStocks'], p['volUB'], p['dailyBiasRange'])

mkt.setBias(p['bias'])

endPrices = simMkt(mkt, p['numDays'], p['mo'])

pylab.figure(1)

plotAverageOverTime(endPrices, 'Average Closing Prices')

pylab.figure(2)

plotDistributionAtEnd(mkt, 'Distribution of Prices', colors[test%len(colors)])

if showHistory:

for s in mkt.getStocks():

s.showHistory(test+2, str(test))

def runTest(numTrials):

#Constants used in testing

numDaysPerYear = 200.0

params = {}

params['numDays'] = 200

params['numStocks'] = 500

params['bias'] = 0.1/numDaysPerYear #General market bias

params['volUB'] = 12.0/numDaysPerYear #Upper bound on volatility for a stock

params['mo'] = 1.1/numDaysPerYear #Momentum factor

params['dailyBiasRange'] = (0.0, 4.0/200.0)

for t in range(1, numTrials+1):

runTrial(True, t, params)

runTest(3)

pylab.show()

そして、Bard の時々非常に詳細な回答からの抜粋:

The code you have provided is a Python program that simulates a stock market. The program defines three classes:

Stock: This class represents a single stock. It has properties for the stock's price, history, distribution, volatility, and last change influence.

SimpleMarket: This class represents a simple stock market. It has a list of stocks, a bias, and a volatility upper bound.

Market: This class inherits from SimpleMarket and adds a daily bias range property. The program also defines several functions:

• simMkt: This function simulates the market for a given number of days and momentum factor.

• plotAverageOverTime: This function plots the average closing price of the stocks over time.

• plotDistributionAtEnd: This function plots the distribution of prices at the end of the simulation.

• runTrial: This function runs a single simulation and plots the results.

• runTest: This function runs a number of simulations and plots the results.

The program is run by calling the runTest function with the desired number of simulations. The program will then generate three plots:

• A plot of the average closing price of the stocks over time.

• A plot of the distribution of prices at the end of the simulation.

• A plot of the history of prices for each stock.

The program can be used to simulate a variety of different stock markets. By changing the values of the parameters, you can change the volatility of the market, the bias of the market, and the momentum factor. You can also use the program to simulate different trading strategies. For example, you could simulate a strategy that buys stocks when they are undervalued and sells them when they are overvalued.

Google Bard – 結論

Bard にはチャット インターフェイスがあり、コードを生成して説明しますが、インタラクティブな IDE 統合はありません。上記のプログラミング言語のいずれかでコードを生成、デバッグ、または説明したい場合は、Google の完全に無料の Generative AI ツールを試してみる価値があります。

GitHub コパイロット X

GitHub コパイロット間違いや幻覚が起こりますが、以前ほど頻繁ではありません。

Copilot X は、特に次のプログラミング言語をサポートしています。

  • パイソン、

  • JavaScript、

  • タイプスクリプト、

  • ルビー、

  • ジャワ、

  • C++、

  • C#、

  • PHP、

  • 行く、

  • 迅速、

  • コトリン

  • さび。

テストの一環として主にPython を使用しました。

Copilot X の最も顕著な失敗は、Web スクレイピング タスクでした。 AI ツールは、表面的には信頼できるように見えるコードを生成しました。しかし、よく見てみると、それが決して機能しないことが明らかになりました。さらに悪いことに、Copilot Chat を通じてさまざまな問題に対処した後、ツールはますます行き詰まりました。すべての AI ヘルパーと同様に、Copilot X によって生成されたコードは、未知のプログラマーからのプル リクエストと同様に注意して扱う必要があります。

Copilot X が MIT コード例の説明を求められたとき、彼は部分的に正しい答えを返しました。このツールから多くの説明作業を行う必要がありました。

Github Copilot X – 結論

プログラミング エディターのコード生成機能 (現在、Visual Studio の現行バージョンと Visual Studio Code の最新 Insider バージョンのみをサポートしています) に加えて、Copilot X はエディターにGPT-4チャット パネルも追加します。また、ターミナル インターフェイス、単体テストの生成とプル リクエストの説明のサポート、ドキュメントから説明を抽出する機能も提供します。個人は Copilot (X) に 10 ドルを支払い、企業は月額 19 ドルを支払います。

開発者向けの生成 AI ツール – テストの結論

注意すべき点は、たとえ個々の結果 (Bard や Copilot X からのコードの説明など) が説得力を持っていたとしても、提示された Gen-AI コーディング ツールはどれも現在完全に開発されていないということです。

したがって、私が企業に推奨するのは、AI コーディング ツールを監視し、開発者にそれらを実験するよう奨励することです。ただし、ソフトウェア開発者がこのタイプのツールを完全に信頼するにはまだ時期尚早です。 (FM)

この投稿は、米国の姉妹誌 Infoworld の記事に基づいています。