【OpenDevin】無料で簡単にAI開発できる自動化ツール

OpenDevin 無料 簡単 AI 開発 自動化ツール

WEELメディア事業部LLMリサーチャーの中田です。

AIスタートアップ企業のCognitionが開発した完全自立型のエンジニアAIDevin」の、オープンソース版である「OpenDevin」が公開されました。

あの話題のDevinを、ローカル環境で実行できるんです!

公式GitHubでのスター数は、すでに6200を超えており、大注目のツールであることが分かります。

この記事ではOpenDevinの使い方や、有効性の検証まで行います。本記事を熟読することで、OpenDevinの凄さを理解し、いち早くDevinを疑似体験できます。

ぜひ、最後までご覧ください。

目次

OpenDevinの概要

つい先日、ソフトウェア開発を完全自律的にで行えるとして、Cognitionの「Devin」が話題となりました。そしてこの度、話題のDevinをオープンソースとして利用できるAIエージェント「OpenDevin」が公開されたのです。

本家のDevinと同様に、「バグ修正」や「ユーザーとの対話を通じた高度なソフトウェア開発」などのタスクを完全自律的に行えます。

とはいえ、「精度面では本当に本家Devinと同じくらいなのか?」という疑問もあり、未知数な部分が多いです。

本家のDevinについては、「【Devin】未来の技術が到来!完全自立型の生成AIソフトウェアエンジニアが登場」を合わせてご確認ください。

OpenDevinのライセンス

公式Gitリポジトリによると、MIT Licenseのもと、無料で利用することが可能です。

利用用途可否
商用利用⭕️
改変⭕️
配布⭕️
特許使用記載なし
私的使用⭕️
参考:https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE

OpenDevinの使い方

公式Gitリポジトリを参考に、Windows11上で実行しました。

前提として、以下の3つをインストールしている必要があります。

  • Docker
  • Python >= 3.10
  • Node.js >= 14.8

まず、以下のコマンドを実行して、リポジトリをクローンしましょう。

git clone https://github.com/OpenDevin/OpenDevin.git

次に、OpenAIのAPIキーと、先ほどクローンした「OpenDevin」のプロジェクトフォルダのパスに関する環境変数の設定です(Mac、Linuxならexportです)。

set [OPENAI_API_KEY=["..."]]
set [WORKSPACE_DIR]=["クローンしたOpenDevinのフォルダへのパス"]]

次に、以下のコマンドを実行して、ライブラリのインストールや、OpenDevinのバックエンドサーバーの起動をしましょう。

python -m pip install -r requirements.txt
uvicorn opendevin.server.listen:app --port 3000

次に、別のターミナルを起動して、そちらで以下のコマンドを実行してください。

cd frontend
npm install
npm run start -- --port 3001

これによって、localhost:3001でOpenDevinを実行できます。実行完了したら、以下の画面がブラウザで表示されるでしょう。

左下の入力欄に、自然言語でOpenDevinに指示を出す形となります。

「OpenDevin」フォルダ直下の「workspace」というフォルダに、仮想環境が構築されます。

OpenDevinを動かすのに必要なPCのスペック

■CPUの種類:Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz 2.90 GHz
■システムメモリ:16.0GB
■GPUの種類:GPUなし

データサイエンス関連に強いオープンソース自律型エージェントについては、「【Data Interpreter】Devinをも凌ぐMetaGPTのデータ分析AIエージェント」を合わせてご確認ください。

Devinで話題となったタスクを試してみた

ここでは、Devinの紹介YouTube動画でも話題になった「Devinを使ってできること」などを、OpenDevinでいくつか試してみます。

具体的には、以下の2つのタスクを実行させてみます。

  • 「ライフゲーム」のサイトを作成しNetlifyに公開
  • 画像認識の深層学習モデルの構築

それでは順番に見ていきましょう。

「ライフゲーム」のサイトを作成しNetlifyに公開

以下の指示文を入力してみます。

Develop automated machine learning software that allows users to fill in a “dataset name” and “what they want to do” and the software will use machine learning to do what they want to do with that dataset.

和訳:
ユーザーが「データセット名」と「やりたいこと」を記入すれば、そのデータセットを使用してやりたいことを機械学習で実現できるような自動機械学習ソフトウェアを開発してください。

実行の様子は、以下の通り。

未完成のまま、途中で止まってしまいました。

挙動を見ている感じ、問題が発生したら自分で解決して、自律的にデバック等をしているようでした。ちなみに、「Code Editor」タグから、OpenDevinが作成したコードを見れます。今回は、以下のようなコードが生成されました。

const canvas = document.getElementById('gameOfLifeCanvas');
const ctx = canvas.getContext('2d');
const resolution = 10;
canvas.width = 800;
canvas.height = 600;

const COLS = canvas.width / resolution;
const ROWS = canvas.height / resolution;

function buildGrid() {
  return new Array(COLS).fill(null)
    .map(() => new Array(ROWS).fill(0)
    .map(() => Math.floor(Math.random() * 2)));
}

let grid = buildGrid();

function update() {
  grid = nextGen(grid);
  render(grid);
  requestAnimationFrame(update);
}

function nextGen(grid) {
  const nextGen = grid.map(arr => [...arr]);

  for (let col = 0; col < grid.length; col++) {
    for (let row = 0; row < grid[col].length; row++) {
      const cell = grid[col][row];
      let numNeighbours = 0;
      for (let i = -1; i < 2; i++) {
        for (let j = -1; j < 2; j++) {
          if (i === 0 && j === 0) continue;
          const x_cell = col + i;
          const y_cell = row + j;

          if (x_cell >= 0 && y_cell >= 0 && x_cell < COLS && y_cell < ROWS) {
            const currentNeighbour = grid[col + i][row + j];
            numNeighbours += currentNeighbour;
          }
        }
      }

      // rules
      if (cell === 1 && numNeighbours < 2) {
        nextGen[col][row] = 0;
      } else if (cell === 1 && numNeighbours > 3) {
        nextGen[col][row] = 0;
      } else if (cell === 0 && numNeighbours === 3) {
        nextGen[col][row] = 1;
      }
    }
  }

  return nextGen;
}

function render(grid) {
  for (let col = 0; col < grid.length; col++) {
    for (let row = 0; row < grid[col].length; row++) {
      const cell = grid[col][row];

      ctx.beginPath();
      ctx.rect(col * resolution, row * resolution, resolution, resolution);
      ctx.fillStyle = cell ? 'black' : 'white';
      ctx.fill();
      ctx.stroke();
    }
  }
}

requestAnimationFrame(update);

画像認識の深層学習モデルの構築

続いては、自然言語による命令から、画像認識の深層学習モデルの構築を行ってもらいましょう。使用したプロンプトは、以下の通りです。

Create a deep learning model of image recognition using the CIFAR-10 dataset, which is readily available in PyTorch. In doing so, please make the model as accurate as possible.

和訳:
PyTorchで簡単に利用できるCIFAR-10データセットを使用して、画像認識のディープラーニングモデルを作ってください。その際、できるだけ精度の高いモデルを作ってください。

どうやら必要なライブラリも、自動でインストールしてくれるらしい。

こちらも、途中で止まってしまいましたが、以下のようなPythonコードを生成してくれました。

import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F

transform = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64,
                                         shuffle=False, num_workers=2)

classes = ('plane', 'car', 'bird', 'cat',
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
        self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
        self.conv3 = nn.Conv2d(64, 128, 3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.batch_norm1 = nn.BatchNorm2d(32)
        self.batch_norm2 = nn.BatchNorm2d(64)
        self.batch_norm3 = nn.BatchNorm2d(128)
        self.dropout = nn.Dropout(0.5)
        self.fc1 = nn.Linear(128 * 4 * 4, 512)
        self.fc2 = nn.Linear(512, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.batch_norm1(self.conv1(x))))
        x = self.pool(F.relu(self.batch_norm2(self.conv2(x))))
        x = self.pool(F.relu(self.batch_norm3(self.conv3(x))))
        x = x.view(-1, 128 * 4 * 4)
        x = self.dropout(x)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

net = Net()

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(), lr=0.001)

for epoch in range(30):  # loop over the dataset multiple times
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 200 == 199:    # print every 200 mini-batches
            print(f'[{epoch + 1}, {i + 1}]: loss: {running_loss / 200}')
            running_loss = 0.0

print('Finished Training')

テストデータの精度を評価するために、以下のコードを追加しました。

# After finishing the training, evaluate the model on test data
correct = 0
total = 0
# No need to keep track of gradients
with torch.no_grad():
    for data in testloader:
        images, labels = data
        # Forward pass to get outputs
        outputs = net(images)
        
        # The class with the highest energy is what we choose as prediction
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

# Calculate and print the accuracy
accuracy = 100 * correct / total
print(f'Accuracy of the network on the 10000 test images: {accuracy} %')

その結果、Accuracy「78.62 %」という結果になり、そこそこの精度を達成できました。

Claude 3の最適なプロンプトを自動生成してくれるツールについては、「【claude-prompt-engineer】ChatGPTを解約してClaude 3をもっと使いたくなるAIエージェントの使い方を解説」を合わせてご確認ください。

ソフトウェア開発の面倒な作業はエンジニアAIに任せよう

本記事では、Devinのオープンソースプロジェクト「OpenDevin」についてご紹介しました。

また、あの話題のDevinをいち早く試せるということで、今後も注目が集まり、さらなる改良が見込めるでしょう。そうなれば、ソフトウェア開発における定型的な作業などは、OpenDevinなどのエンジニア系AIに任せてしまった方が良いかもしれません。

検証の結果、完全自律的にソフトウェア開発を行うのは、まだ難しいのかな、といった印象でした。

ちなみに、公式のGitリポジトリでは、contribusionsを歓迎しているとのこと。

OpenDevin is a community-driven project, and we welcome contributions from everyone. Whether you’re a developer, a researcher, or simply enthusiastic about advancing the field of software engineering with AI, there are many ways to get involved:

  • Code Contributions: Help us develop the core functionalities, frontend interface, or sandboxing solutions.
  • Research and Evaluation: Contribute to our understanding of LLMs in software engineering, participate in evaluating the models, or suggest improvements.
  • Feedback and Testing: Use the OpenDevin toolset, report bugs, suggest features, or provide feedback on usability.

興味があれば、参加してみても良さそうですね。

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ
無料相談

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、サービス紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • 中田

    データサイエンス専攻の大学院生。大学では、生成系AIの拡散モデルを用いた音楽生成について研究。 趣味は作曲、サッカー、コーヒー。

  • URLをコピーしました!
  • URLをコピーしました!
目次