AutoGen Studioでデータ取得〜データ生成(推定)
やりたいこと
AutoGen StudioというAI Agentの作成と実行を簡易的にできるツールがあります。
今回はバンダイナムコの商品一覧をwikipediaから作成して、カテゴリ(親ブランド)を推定させてみようと思います。
※AutoGen Studioは0.4系の方がUIはカッコ良いのですが、エージェント間のcsvのやり取りがわからなかったので、0.2系でとりあえずやりました。
Agent Workflow作成
AutoGen Studioの起動
autogenstudio ui --port 8081 --appdir ./app
Wikiから対象のブランドの一覧を作成するAgentの作成
item scraperというAgentを作成しました。
system_prompt
あなたは、ユーザーが指定したブランド情報をウェブから取得するエージェントです。
Pythonコード (pythonのコードブロック) またはシェルスクリプト (shのコードブロック) を提案し、実行することで
Web検索やWebページの内容取得、ファイルのダウンロード/読み取り、現在の日付/時刻の確認、OSの種類の確認など
- バンダイナムコエンターテインメントのゲームタイトル一覧から指定ブランドに関するゲームタイトルを取得
import re
import csv
import requests
from bs4 import BeautifulSoup
def get_titles(keyword):
url = "https://ja.wikipedia.org/wiki/バンダイナムコエンターテインメント発売のゲームタイトル一覧"
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
results = []
# 「ブランド」カラムに出力したい文字列を指定(例:検索キーワードをそのまま使用)
brand_name = keyword
# 「mw-heading mw-heading4」クラスをもつ<div>をすべて探す
heading_divs = soup.find_all("div", class_="mw-heading mw-heading4")
for heading_div in heading_divs:
# 見出し<h4>を取得
h4_tag = heading_div.find("h4")
if not h4_tag:
continue
heading_text = h4_tag.get_text(strip=True)
# "xxxx年" を抽出(例: 2006年, 2007年…)
year_match = re.search(r"(\d{4})年", heading_text)
if not year_match:
continue
year_str = year_match.group(1) # "2006" など
# heading_div の次の兄弟要素をたどって、<ul> が来たらその中の <li> を解析
sibling = heading_div.find_next_sibling()
while sibling:
# 次の年や別の見出し(div/h2/h3/h4...)が来たら break
if (
sibling.name == "div" and "mw-heading" in (sibling.get("class") or [])
) or (sibling.name in ["h2", "h3", "h4", "h5"]):
break
if sibling.name == "ul":
li_list = sibling.find_all("li", recursive=False)
for li in li_list:
li_text = li.get_text(strip=True)
# ここで検索キーワードを使用
if keyword not in li_text:
continue
# 発売年月を推定(例:「4月 - ドラゴンボールZ 真武道会」なら 2006年4月)
month_match = re.match(r"^(\d{1,2})月", li_text)
if month_match:
month_str = month_match.group(1)
release_date = f"{year_str}年{month_str}月"
else:
release_date = f"{year_str}年N/A"
# 商品名:<a>タグのテキストからキーワードを含むものを優先
product_name = None
for link in li.find_all("a"):
link_text = link.get_text(strip=True)
if keyword in link_text:
product_name = link_text
break
if not product_name:
# 見つからなければ <li> 全体テキストを使う
product_name = li_text
# 開発元: (開発:XXXX) の部分を抜き取る
dev_match = re.search(r"(開発:(.+?))", li_text)
if dev_match:
developer = dev_match.group(1)
else:
developer = "N/A"
results.append(
{
"ブランド": brand_name,
"商品名": product_name,
"開発元": developer,
"発売年月": release_date,
}
)
sibling = sibling.find_next_sibling()
return results
if __name__ == "__main__":
# 「ドラゴンボール」をキーワードとして取得
search_keyword = "ドラゴンボール"
data = get_titles(search_keyword)
csv_filename = f"/xxxx/autogen/app/files/{search_keyword}_titles.csv"
fieldnames = ["ブランド", "商品名", "開発元", "発売年月"]
with open(csv_filename, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
print(f"「{search_keyword}」関連タイトルを {csv_filename} に出力しました。")
- 対象ブランドのゲームに関連する一覧csvを作成する
ブランド,商品名,開発元,発売年月というカラムでcsvを作成する
もし、そのままのタイトルのページがなかったら、似た名称のタイトルを検索する
最後に作成したcsvのパスを返却する
/xxxx/autogen/app/files/{search_keyword}_titles.csv
親ブランドを推定するAgentを作成
create_items_relationsというAgentを作成しました。
こっちはめちゃくちゃシンプルです。
system_prompt
渡されたファイルパスのcsvから親のブランド名のカラムを追加したい。
具体的には商品名から漫画のタイトルとかを抽出して親ブランドとしてデータ生成したい
また、そのcsvを保存したい
該当のcsvがない場合は処理を終了する
ワークフローを作成
シーケンシャルで作成します。シンプル。
playground
「ドラゴンボール」で実行
ブランド,商品名,開発元,発売年月,親ブランド名
ドラゴンボール,ドラゴンボールZ 真武道会,ディンプス,2006年4月,ドラゴンボール
ドラゴンボール,超ドラゴンボールZ,クラフト&マイスター,2006年6月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ Sparking!NEO,スパイク,2006年10月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ 真武道会2,ディンプス,2007年6月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ Sparking! METEOR,スパイク,2007年10月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ バーストリミット,ディンプス,2008年6月,ドラゴンボール
ドラゴンボール,ドラゴンボールDS,,2008年9月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ インフィニットワールド,ディンプス,2008年12月,ドラゴンボール
ドラゴンボール,ドラゴンボール エヴォリューション,ディンプス,2009年3月,ドラゴンボール
ドラゴンボール,ドラゴンボール 天下一大冒険,メディア・ビジョンエンタテインメント,2009年7月,ドラゴンボール
ドラゴンボール,ドラゴンボール レイジングブラスト,スパイク,2009年11月,ドラゴンボール
ドラゴンボール,ドラゴンボール レイジングブラスト2,スパイク,2010年11月,ドラゴンボール
ドラゴンボール,ドラゴンボール アルティメットブラスト,スパイク,2011年12月,ドラゴンボール
ドラゴンボール,ドラゴンボールヒーローズ アルティメットミッション,,2013年2月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ BATTLE OF Z,スタジオアートディンク,2014年1月,ドラゴンボール
ドラゴンボール,ドラゴンボール ZENKAIバトルロイヤル,,2011年5月,ドラゴンボール
ドラゴンボール,ドラゴンボール ZENKAIバトルロイヤル 超サイヤ人覚醒,,2012年7月,ドラゴンボール
ドラゴンボール,ドラゴンボールヒーローズ アルティメットミッション2,ディンプス,2014年8月,ドラゴンボール
ドラゴンボール,ドラゴンボール ゼノバース,ディンプス,2015年2月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ 超究極武闘伝,アークシステムワークス,2015年6月,ドラゴンボール
ドラゴンボール,ドラゴンボール ゼンカイバトル,,2015年7月,ドラゴンボール
ドラゴンボール,ドラゴンボールフュージョンズ,ガンバリオン,2016年8月,ドラゴンボール
ドラゴンボール,ドラゴンボール ゼノバース2,ディンプス,2016年11月,ドラゴンボール
ドラゴンボール,ドラゴンボールヒーローズ アルティメットミッションX,,2017年4月,ドラゴンボール
ドラゴンボール,ドラゴンボール ゼノバース2 for Nintendo Switch,ディンプス,2017年9月,ドラゴンボール
ドラゴンボール,ドラゴンボール ファイターズ,アークシステムワークス,2018年2月,ドラゴンボール
ドラゴンボール,ドラゴンボール レジェンズ,,2018年5月,ドラゴンボール
ドラゴンボール,スーパードラゴンボールヒーローズ ワールドミッション,,2019年4月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ カカロット,サイバーコネクトツー,2020年1月,ドラゴンボール
ドラゴンボール,ドラゴンボールZ カカロット + 新たなる覚醒セット,サイバーコネクトツー,2021年9月,ドラゴンボール
ドラゴンボール,10月 - ドラゴンボール ザ ブレイカーズ(開発:ディンプス),ディンプス,2022年10月,ドラゴンボール
ドラゴンボール,ドラゴンボール Sparking! ZERO,スパイク・チュンソフト,2024年10月,ドラゴンボール
想定通りっぽい。
「ガンダム」で実行。
ブランド,商品名,開発元,発売年月,親ブランド
ガンダム,3月 - ガンダムメダルシューティング ~V作戦発動! (メダル) - シューティングメダルシリーズ,,2002年3月,ガンダム
ガンダム,機動戦士ガンダム 一年戦争,,2005年4月,ガンダム
ガンダム,クイズ機動戦士ガンダム 問・戦士DX,クラフト&マイスター,2006年7月,ガンダム
ガンダム,SDガンダム GGENERATION PORTABLE,トムクリエイト,2006年8月,ガンダム
ガンダム,ガンダムバトルロワイヤル,スタジオアートディンク,2006年10月,ガンダム
ガンダム,機動戦士ガンダム Target in Sight,ベック,2006年11月,ガンダム
ガンダム,SDガンダム スカッドハンマーズ,ベック,2006年12月,ガンダム
ガンダム,機動戦士ガンダムSEED DESTINY 連合vs.Z.A.F.T.II PLUS,カプコン,2006年12月,ガンダム
ガンダム,ガンダム無双,コーエー,2007年3月,ガンダム
ガンダム,機動戦士ガンダムSEED 連合vs.Z.A.F.T. PORTABLE,,2007年4月,ガンダム
ガンダム,ガンダムバトルクロニクル,スタジオアートディンク,2007年10月,ガンダム
ガンダム,SDガンダム GGENERATION SPIRITS,トムクリエイト,2007年11月,ガンダム
ガンダム,機動戦士ガンダム ギレンの野望 アクシズの脅威,,2008年2月,ガンダム
ガンダム,エンブレム オブ ガンダム,ベック,2008年5月,ガンダム
ガンダム,ガンダムバトルユニバース,スタジオアートディンク,2008年7月,ガンダム
ガンダム,ガンダム オペレーショントロイ,ディンプス,2008年6月,ガンダム
ガンダム,機動戦士ガンダム00 ガンダムマイスターズ,ユークス,2008年10月,ガンダム
ガンダム,機動戦士ガンダム ガンダムVS.ガンダム,カプコン,2008年11月,ガンダム
ガンダム,機動戦士ガンダム 戦場の絆 ポータブル,アクセスゲームズ,2009年3月,ガンダム
ガンダム,SDガンダム GGENERATION WARS,トムクリエイト,2009年8月,ガンダム
ガンダム,機動戦士ガンダム戦記 (PlayStation 3),ベック,2009年9月,ガンダム
ガンダム,機動戦士ガンダム ガンダムVS.ガンダムNEXT PLUS,カプコン,2009年12月,ガンダム
ガンダム,ガンダムアサルトサヴァイブ,スタジオアートディンク,2010年3月,ガンダム
ガンダム,SDガンダム GGENERATION WORLD,トムクリエイト,2011年2月,ガンダム
ガンダム,ガンダム ザ・スリーディーバトル,スタジオアートディンク,2011年3月,ガンダム
ガンダム,ガンダムメモリーズ 〜戦いの記憶〜,B.B.スタジオ,2011年6月,ガンダム
ガンダム,機動戦士ガンダム 新ギレンの野望,,2011年8月,ガンダム
ガンダム,SDガンダム GGENERATION 3D,トムクリエイト,2011年12月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス,バイキング,2011年12月,ガンダム
ガンダム,機動戦士ガンダム 木馬の軌跡,リバース,2012年1月,ガンダム
ガンダム,機動戦士ガンダムUC,フロム・ソフトウェア,2012年3月,ガンダム
ガンダム,機動戦士ガンダムSEED BATTLE DESTINY,スタジオアートディンク,2012年6月,ガンダム
ガンダム,機動戦士ガンダムAGE COSMIC DRIVE,レベルファイブ,2012年8月,ガンダム
ガンダム,8月 - 機動戦士ガンダムAGE UNIVERSE ACCEL (開発:レベルファイブ),レベルファイブ,2012年8月,ガンダム
ガンダム,SDガンダム GGENERATION OVERWORLD,トムクリエイト,2012年9月,ガンダム
ガンダム,ガンダムブレイカー,クラフト&マイスター / イリンクス,2013年6月,ガンダム
ガンダム,真・ガンダム無双,コーエーテクモゲームス,2013年12月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス フルブースト,バイキング,2013年12月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス フルブースト,バイキング,2014年1月,ガンダム
ガンダム,機動戦士ガンダム ガンダムVS.ガンダム NEXT,カプコン,2009年3月,ガンダム
ガンダム,機動戦士ガンダム 戦場の絆,,2006年11月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス,バイキング,2010年9月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス フルブースト,バイキング,2012年3月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス マキシブースト,,2014年3月,ガンダム
ガンダム,機動戦士ガンダム サイドストーリーズ,B.B.スタジオ,2014年5月,ガンダム
ガンダム,ガンダムトライエイジSP,,2014年7月,ガンダム
ガンダム,ガンダムブレイカー2,クラフト&マイスター / イリンクス,2014年12月,ガンダム
ガンダム,機動戦士ガンダム バトルフォートレス,,2015年8月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス フォース,ランカース,2015年12月,ガンダム
ガンダム,ガンダムブレイカー3,クラフト&マイスター / イリンクス,2016年3月,ガンダム
ガンダム,SDガンダム GGENERATION GENESIS,トムクリエイト,2016年11月,ガンダム
ガンダム,ガンダムバーサス,,2017年7月,ガンダム
ガンダム,SDガンダム GGENERATION GENESIS for Nintendo Switch,トムクリエイト,2018年4月,ガンダム
ガンダム,New ガンダムブレイカー,クラフト&マイスター,2018年6月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス2,,2018年10月,ガンダム
ガンダム,ガンダムブレイカー モバイル,,2019年7月,ガンダム
ガンダム,SDガンダム GGENERATION CROSSRAYS,トムクリエイト,2019年11月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス マキシブースト ON,,2020年7月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス2 クロスブースト,,2021年3月,ガンダム
ガンダム,機動戦士ガンダム 戦場の絆II,バイキング,2021年7月,ガンダム
ガンダム,機動戦士ガンダム バトルオペレーション Code Fairy,B.B.スタジオ,2021年11月,ガンダム
ガンダム,機動戦士ガンダム U.C. ENGAGE,,2021年11月,ガンダム
ガンダム,SDガンダム バトルアライアンス,アートディンク,2022年8月,ガンダム
ガンダム,11月 - 機動戦士ガンダム 鉄血のオルフェンズG,,2022年11月,ガンダム
ガンダム,機動戦士ガンダム エクストリームバーサス2 オーバーブースト,,2023年6月,ガンダム
ガンダム,8月 - ガンダムブレイカー4(開発:クラフト&マイスター),クラフト&マイスター,2024年8月,ガンダム
ガンダム,機動戦士ガンダムSEED BATTLE DESTINY REMASTERED,アートディンク,2025年5月,ガンダム
ガンダム,時期未定 - 機動戦士ガンダム エクストリームバーサス2 インフィニットブースト,,2025年N/A,ガンダム
良さそう。
条件をつけてみる。
「2020年のすべてのタイトル」
ブランド,商品名,開発元,発売年月,親ブランド名
バンダイナムコエンターテインメント,1月 - スーパーロボット大戦X(Switch/Steam版)(開発:B.B.スタジオ),B.B.スタジオ,2020年1月,
バンダイナムコエンターテインメント,1月 - ミニ四駆 超速グランプリ(開発:ディンプス),ディンプス,2020年1月,
バンダイナムコエンターテインメント,ドラゴンボールZ カカロット,サイバーコネクトツー,2020年1月,
バンダイナムコエンターテインメント,ポーカースタジアム,,2020年1月,
バンダイナムコエンターテインメント,湾岸ミッドナイト MAXIMUM TUNE 6R,,2020年1月,
バンダイナムコエンターテインメント,ONE PUNCH MAN A HERO NOBODY KNOWS,スパイク・チュンソフト,2020年2月,
バンダイナムコエンターテインメント,僕のヒーローアカデミア One’s Justice2,バイキング,2020年3月,僕
バンダイナムコエンターテインメント,太鼓の達人 2020年3月ver,,2020年3月,太鼓
バンダイナムコエンターテインメント,海物語 ラッキーマリンツアーズ,,2020年3月,
バンダイナムコエンターテインメント,ONE PIECE 海賊無双4,,2020年3月,
バンダイナムコエンターテインメント,ことばのパズル もじぴったんアンコール,,2020年4月,ことば
バンダイナムコエンターテインメント,ワニワニパニックR,,2020年6月,
バンダイナムコエンターテインメント,ナムコットコレクション,B.B.スタジオ / M2,2020年6月,
バンダイナムコエンターテインメント,ミスタードリラーアンコール,,2020年6月,
バンダイナムコエンターテインメント,ソードアート・オンライン アリシゼーション リコリス,アクリア,2020年7月,
バンダイナムコエンターテインメント,テイルズ オブ クレストリア,,2020年7月,
バンダイナムコエンターテインメント,機動戦士ガンダム エクストリームバーサス マキシブースト ON,,2020年7月,
バンダイナムコエンターテインメント,7月 - ドラえもん のび太の牧場物語(PS4版)(企画:マーベラス、開発:ブラウニーズ),,2020年7月,7月 - ドラえもん
バンダイナムコエンターテインメント,8月 - キャプテン翼 RISE OF NEW CHAMPIONS(開発:タムソフト),タムソフト,2020年8月,
バンダイナムコエンターテインメント,8月 - JUMP FORCE デラックスエディション(開発:スパイク・チュンソフト),スパイク・チュンソフト,2020年8月,
バンダイナムコエンターテインメント,Project CARS 3,,2020年9月,
バンダイナムコエンターテインメント,プロ野球 ファミスタ 2020,エイティング,2020年9月,
バンダイナムコエンターテインメント,KAMEN RIDER memory of heroez,ナツメアタリ,2020年10月,
親ブランドを指定してみる。
create_items_relationsのsystem_prompt変更
渡されたファイルパスのcsvから親のブランド名のカラムを追加したい。
具体的には商品名から漫画のタイトルとかを抽出して親ブランドとしてデータ生成したい
親ブランドの候補
- ONE PIECE
- ドラゴンボール
- ドラえもん
また、そのcsvを保存したい
該当のcsvがない場合は処理を終了する
リトライ
「2020年のすべてのタイトル」
ブランド,商品名,開発元,発売年月,親ブランド
バンダイナムコエンターテインメント,1月 - スーパーロボット大戦X(Switch/Steam版)(開発:B.B.スタジオ),B.B.スタジオ,2020年N/A,
バンダイナムコエンターテインメント,1月 - ミニ四駆 超速グランプリ(開発:ディンプス),ディンプス,2020年N/A,
バンダイナムコエンターテインメント,ドラゴンボールZ カカロット,サイバーコネクトツー,2020年N/A,ドラゴンボール
バンダイナムコエンターテインメント,ポーカースタジアム,,2020年N/A,
バンダイナムコエンターテインメント,湾岸ミッドナイト MAXIMUM TUNE 6R,,2020年N/A,
バンダイナムコエンターテインメント,ONE PUNCH MAN A HERO NOBODY KNOWS,スパイク・チュンソフト,2020年N/A,
バンダイナムコエンターテインメント,僕のヒーローアカデミア One’s Justice2,バイキング,2020年N/A,
バンダイナムコエンターテインメント,太鼓の達人 2020年3月ver,,2020年N/A,
バンダイナムコエンターテインメント,海物語 ラッキーマリンツアーズ,,2020年N/A,
バンダイナムコエンターテインメント,ONE PIECE 海賊無双4,,2020年N/A,ONE PIECE
バンダイナムコエンターテインメント,ことばのパズル もじぴったんアンコール,,2020年N/A,
バンダイナムコエンターテインメント,ワニワニパニックR,,2020年N/A,
バンダイナムコエンターテインメント,ナムコットコレクション,B.B.スタジオ / M2,2020年N/A,
バンダイナムコエンターテインメント,ミスタードリラーアンコール,,2020年N/A,
バンダイナムコエンターテインメント,ソードアート・オンライン アリシゼーション リコリス,アクリア,2020年N/A,
バンダイナムコエンターテインメント,テイルズ オブ クレストリア,,2020年N/A,
バンダイナムコエンターテインメント,機動戦士ガンダム エクストリームバーサス マキシブースト ON,,2020年N/A,
バンダイナムコエンターテインメント,7月 - ドラえもん のび太の牧場物語(PS4版)(企画:マーベラス、開発:ブラウニーズ),,2020年N/A,ドラえもん
バンダイナムコエンターテインメント,8月 - キャプテン翼 RISE OF NEW CHAMPIONS(開発:タムソフト),タムソフト,2020年N/A,
バンダイナムコエンターテインメント,8月 - JUMP FORCE デラックスエディション(開発:スパイク・チュンソフト),スパイク・チュンソフト,2020年N/A,
バンダイナムコエンターテインメント,Project CARS 3,,2020年N/A,
バンダイナムコエンターテインメント,プロ野球 ファミスタ 2020,エイティング,2020年N/A,
バンダイナムコエンターテインメント,KAMEN RIDER memory of heroez,ナツメアタリ,2020年N/A,
取れてないやつは取れてないけど、候補に入れたドラゴンボール、ONE PIECE、ドラえもんは親ブランドが推定された。
まとめ
やっぱり結構使えそうだなーと。
ちなみにsystem_promptにコードを埋め込みましたが、
0.2.0だとskills、0.4.0だとtoolsでコード実行ができるようなので、あんまり正しい使い方ではなさそうです。
Discussion