😊

MetaGPTをWebUI化&日本語対応

に公開

目次

  1. 概要
  2. WebUI化
  3. 日本語対応
  4. 結果
  5. 総括

概要

https://zenn.dev/tk1/articles/87dcf9ab355c07
前回の記事で紹介したChatGPT4ベースのメタプログラミングフレームワークMetaGPTですが、現在公開されているコードだとColab上などで直接pythonを実行するしかなく、出力されるユーザーフローなども英語のみなので

  • WebUI化
  • 日本語対応

をしてみました

元のコードそのままだとどちらも対応できなかったので
コードを落としてきて直接改造しています

元のコードはこちら
https://github.com/geekan/MetaGPT

WebUI化

https://zenn.dev/tk1/articles/ed1be4872f7243
以前チャットを実装したように

  • GoogleColab(GPU:V100)
  • 通信プロトコル websocket
  • フロントエンド javascript
  • サーバサイド python(FastAPI)
  • サーバアプリ uvicorn、ngrok

で実装します

元のコードだと…

  • 実行開始は可能
  • 1回の実行に10分程度かかるため進捗を表示したいが必要な情報は取得できない(現在のラウンド値、実行されているタスク…等)
  • 最終出力されたフォルダの場所が取得できない

…なので、RunningStatusというシングルトンのクラスを作り
各所で呼び出して必要な値を設定する実装をしました

running_status.py
from metagpt.utils.singleton import Singleton
from pathlib import Path

class RunningStatus(metaclass=Singleton):

    def __init__(self):
        self.reset()

    def reset(self):
        self.n_round = 0
        self.max_round = 0
        self.running_role : set[type] = set()
        self.running_action : dict[type, type] = dict()
        self.total_cost = 0
        self.workspace = Path()
        self.done = False

    def to_dict(self):
        return dict(
            n_round=self.n_round,
            max_round=self.max_round,
            running_role=[r.__name__ for r in self.running_role],
            running_action={k.__name__: v.__name__ for k, v in self.running_action.items()},
            total_cost=self.total_cost,
            workspace=str(self.workspace),
            done=self.done
          )

running_status = RunningStatus()

こちらをColab上のコードから都度呼び出し、取得した情報をフロント側に送って表示させます

日本語対応

OpenAIのAPIを叩いて生成を進める仕組みなので、英語のプロンプトを日本語に変えて実行すればOKです
といってもコード各所に英語プロンプトが散らばっており、1つ1つ日本語対応させる必要があります

具体的には以下のコードに記載されているプロンプト文を修正しました

  • metagpt/provider/base_gpt_api.py
  • metagpt/roles/architect.py
  • metagpt/roles/engineer.py
  • metagpt/roles/product_manager.py
  • metagpt/roles/project_manager.py
  • metagpt/roles/qa_engineer.py
  • metagpt/roles/role.py
  • metagpt.actions/design_api.py
  • metagpt.actions/project_management.py
  • metagpt.actions/write_code.py
  • metagpt.actions/write_code_review.py
  • metagpt.actions/write_prd.py
  • metagpt.actions/write_test.py
変更前イメージ
templates = {~~}

prompt_template, format_example = get_template(templates, format)
変更後イメージ
templates = {
	"EN":~~,
	"JP":~~
	}

prompt_template, format_example = get_template(templates[CONFIG.lang], format)

結果

サーバを起動しWebUIから「GUIで操作する計算器アプリを作ってください」と指示を出してみます









実行中のタスクやOpenAIのAPIのコストを表示しつつ、10分ほどで無事完了しました
ダウンロードボタンを押すと要件定義書やソースコードがzipでまとまってダウンロードできます

こちらが出てきた件定義書の一部
日本語で作成されています

ソースコードを実行するとこんな感じで計算器アプリが立ち上がりました
(残念なことに間違った計算結果を出してしまいますが…)

総括

目標としていたWebUI化と日本語対応は達成できました
MetaGPTについてはまだまだ精度が低いものの工夫すれば活用できそうです

今後も今回のように論文で発表されたものを検証/実装をして色々と試していきたいと思います

Discussion