AI に League of Legends の最強新メタビルドを考えてもらいたかった
TL;DR
AI に League of Legends のビルドを考えてもらって実践したらボコボコに負けました。
対象読者
- League of Legends をプレイしている人
- LLM に興味がある人
- Gemini 1.5 Pro に興味がある人
- LLM で大きいデータを楽に扱いたい人
サモナーズリフトへようこそ
こんにちは。クラウドエース バックエンドエンジニアリング部 の伊藝です。
みなさんは、League of Legends をプレイされていますか?
League of Legends (LoL) とは、Riot Games が開発した 5 対 5 のマルチプレイヤーオンラインバトルアリーナ (MOBA) ゲームです。
私はほぼ毎日プレイしています。
ゲームをプレイしていると、周りより強くなりたくなりますよね。
LoL は課金で強くなるゲームではなく、プレイヤー自身のスキルと知識が勝敗を分けるゲームです。
LoL では、チャンピオン (キャラクター) ごとにビルド (アイテム構成) があります。
ビルドを間違えてしまうと、強くなるどころか弱くなってしまいます。一般的には、ビルドは統計データやプロプレイヤーの動画を参考にして考えられます。
しかし、有名なビルドは対策方法も広く知られているため、新しいビルドを考えることも重要です。
そこで、今回は LLM (AI) に LoL のビルドを考えてもらいます。
環境
扱うデータ
League of Legends の Data Dragon という API を利用します。Data Dragon は LoL のチャンピオンやアイテムなどのデータを JSON で提供しています。
問題点
Data Dragon から全チャンピオンの詳細データとアイテムのデータを取得すると、合計で 2.5MB のデータになります。
LLM は、入力データが大きすぎるとトークンの制限に引っかかる可能性があります。
大きいデータを扱う際には、データを小さく分割して処理するか、データを圧縮するなどの対策が一般的です。
しかし、今回利用する Gemini 1.5 Pro は 100 万という大量のトークンを扱えるため、データを分割せずとも扱うことができます。
コード
Data Dragon から取得したデータを LLM に渡してビルドを考えてもらいます。
LangChain というフレームワークを使うことで、LLM を簡単にアプリケーションに組み込むことができます。
プロンプトでは「誰も考えたことがない、勝率 60% を超えるようなビルドを考えてください。」と指示しています。
コード
import json
from enum import StrEnum
from operator import itemgetter
from typing import Any, Dict, List, Optional, Union
import httpx
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import (
RunnableParallel,
RunnableSerializable,
)
from langchain_google_vertexai import ChatVertexAI
from pydantic import BaseModel, ConfigDict, Field
CHAMPIONS_JSON_URL = (
"https://ddragon.leagueoflegends.com/cdn/14.12.1/data/en_US/champion.json"
)
CHAMPION_JSON_URL_FORMAT = (
"https://ddragon.leagueoflegends.com/cdn/14.12.1/data/en_US/champion/{}.json"
)
ITEM_JSON_URL = "https://ddragon.leagueoflegends.com/cdn/14.12.1/data/en_US/item.json"
# API から取得するデータのスキーマ
class ChampionListDataInfo(BaseModel):
model_config = ConfigDict(extra="forbid")
attack: int
defense: int
magic: int
difficulty: int
class Image(BaseModel):
model_config = ConfigDict(extra="forbid")
full: str
sprite: str
group: str
x: int
y: int
w: int
h: int
class ChampionListDataStats(BaseModel):
model_config = ConfigDict(extra="forbid")
hp: int
hpperlevel: int
mp: int
mpperlevel: float
movespeed: int
armor: float
armorperlevel: float
spellblock: float
spellblockperlevel: float
attackrange: int
hpregen: float
hpregenperlevel: float
mpregen: float
mpregenperlevel: float
crit: int
critperlevel: int
attackdamage: int
attackdamageperlevel: float
attackspeedperlevel: float
attackspeed: float
class ChampionListData(BaseModel):
model_config = ConfigDict(extra="forbid")
version: str
id: str
key: str
name: str
title: str
blurb: str
info: ChampionListDataInfo
image: Image
tags: List[str]
partype: str
stats: ChampionListDataStats
class ChampionList(BaseModel):
model_config = ConfigDict(extra="forbid")
type: str
format: str
version: str
data: Dict[str, ChampionListData]
class ChampionDetailDataSkin(BaseModel):
model_config = ConfigDict(extra="forbid")
id: str
num: int
name: str
chromas: bool
class ChampionDetailDataLeveltip(BaseModel):
model_config = ConfigDict(extra="forbid")
label: List[str]
effect: List[str]
class ChampionDetailDataSpell(BaseModel):
model_config = ConfigDict(extra="forbid")
id: str
name: str
description: str
tooltip: str
leveltip: Optional[ChampionDetailDataLeveltip] = None
maxrank: int
cooldown: List[float]
cooldownBurn: str
cost: List[int]
costBurn: str
datavalues: dict
effect: List[Optional[List[float]]]
effectBurn: List[Optional[str]]
vars: List
costType: str
maxammo: str
range: List[int]
rangeBurn: str
image: Image
resource: Optional[str] = None
class ChampionDetailDataPassive(BaseModel):
model_config = ConfigDict(extra="forbid")
name: str
description: str
image: Image
class ChampionDetailDataInfo(BaseModel):
model_config = ConfigDict(extra="forbid")
attack: int
defense: int
magic: int
difficulty: int
class ChampionDetailDataStats(BaseModel):
model_config = ConfigDict(extra="forbid")
hp: int
hpperlevel: int
mp: int
mpperlevel: float
movespeed: int
armor: int
armorperlevel: float
spellblock: int
spellblockperlevel: float
attackrange: int
hpregen: float
hpregenperlevel: float
mpregen: float
mpregenperlevel: float
crit: int
critperlevel: int
attackdamage: int
attackdamageperlevel: float
attackspeedperlevel: float
attackspeed: float
class ChampionDetailData(BaseModel):
model_config = ConfigDict(extra="forbid")
id: str
key: str
name: str
title: str
image: Image
skins: List[ChampionDetailDataSkin]
lore: str
blurb: str
allytips: List[str]
enemytips: List[str]
tags: List[str]
partype: str
info: ChampionDetailDataInfo
stats: ChampionDetailDataStats
spells: List[ChampionDetailDataSpell]
passive: ChampionDetailDataPassive
recommended: List
class ChampionDetail(BaseModel):
model_config = ConfigDict(extra="forbid")
type: str
format: str
version: str
data: Dict[str, ChampionDetailData]
class ItemListBasicRune(BaseModel):
model_config = ConfigDict(extra="forbid")
isrune: bool
tier: int
type: str
class ItemListDataGold(BaseModel):
model_config = ConfigDict(extra="forbid")
base: int
total: int
sell: int
purchasable: bool
class ItemListBasic(BaseModel):
model_config = ConfigDict(extra="forbid")
name: str
rune: ItemListBasicRune
gold: ItemListDataGold
group: str
description: str
colloq: str
plaintext: str
consumed: bool
stacks: int
depth: int
consumeOnFull: bool
from_: List[int] = Field(..., alias="from")
into: List[int]
specialRecipe: int
inStore: bool
hideFromAll: bool
requiredChampion: str
requiredAlly: str
stats: Dict[str, float]
tags: List[str]
maps: Dict[str, bool]
class ItemListData(BaseModel):
model_config = ConfigDict(extra="forbid")
name: str
description: str
colloq: str
plaintext: str
stacks: Optional[int] = None
consumed: Optional[bool] = None
inStore: Optional[bool] = None
into: Optional[List[int]] = None
image: Image
gold: ItemListDataGold
tags: List[str]
maps: Dict[str, bool]
stats: Dict[str, Union[int, float]]
depth: Optional[int] = None
consumeOnFull: Optional[bool] = None
from_: Optional[List[int]] = Field(None, alias="from")
specialRecipe: Optional[int] = None
hideFromAll: Optional[bool] = None
requiredChampion: Optional[str] = None
requiredAlly: Optional[str] = None
effect: Optional[Dict[str, Union[int, float, str]]] = None
class ItemListGroup(BaseModel):
model_config = ConfigDict(extra="forbid")
id: str
MaxGroupOwnable: str
class ItemListTree(BaseModel):
model_config = ConfigDict(extra="forbid")
header: str
tags: List[str]
class ItemList(BaseModel):
model_config = ConfigDict(extra="forbid")
type: str
version: str
basic: ItemListBasic
data: Dict[str, ItemListData]
groups: List[ItemListGroup]
tree: List[ItemListTree]
class ChampionBuildRole(StrEnum):
TOP = "top"
JUNGLE = "jungle"
MIDDLE = "middle"
BOTTOM = "bottom"
SUPPORT = "support"
class ChampionBuild(BaseModel):
champion: str
role: ChampionBuildRole
items: List[str]
runes: List[str]
description: str
class ChampionBuildList(BaseModel):
builds: List[ChampionBuild]
# HTTP クライアント
http_client = httpx.Client()
# チャンピオンデータを取得
with open("./data/champions.json", "wb") as f:
f.write(http_client.get(CHAMPIONS_JSON_URL).content)
# チャンピオンデータを読み込む
champion_list: ChampionList
with open("./data/champions.json", "r") as f:
champion_list = ChampionList.model_validate_json(f.read())
# チャンピオン詳細データを取得
for champion in champion_list.data.values():
print(champion.id)
with open(f"./data/{champion.id}.json", "wb") as f:
f.write(http_client.get(CHAMPION_JSON_URL_FORMAT.format(champion.id)).content)
# チャンピオンデータをリストに変換
champions: List[ChampionDetailData] = []
for champion_list_champion in champion_list.data.values():
with open(f"./data/{champion_list_champion.id}.json", "r") as f:
champion = ChampionDetail.model_validate_json(f.read())
champions.append(champion.data[champion_list_champion.id])
# アイテムデータを取得
with open("./data/items.json", "wb") as f:
f.write(http_client.get(ITEM_JSON_URL).content)
# アイテムデータを読み込む
items_list: ItemList
with open("./data/items.json", "r") as f:
items_list = ItemList.model_validate_json(f.read())
# アイテムデータをリストに変換
items: List[ItemListData] = []
for item in items_list.data.values():
items.append(item)
# プロンプトテンプレート
PROMPT_TEMPLATE = """You are a League of Legends professional AI.
You have access to the latest champion and item information.
Come up with 20 new amazing League of Legends off-meta builds that no one has ever thought of before and give me a win rate of over 60%.
Champions data:
```
{champions}
```
Items data:
```
{items}
```
Output example:
```
{{
"builds": [
{{
"champion": "Aatrox",
"role": "top",
"items": ["Divine Sunderer", "Plated Steelcaps", "Goredrinker", "Sterak's Gage", "Death's Dance", "Guardian Angel"],
"runes": ["Conqueror", "Triumph", "Legend: Tenacity", "Last Stand", "Ravenous Hunter", "Taste of Blood"],
"description": "This build focuses on survivability and sustain, allowing Aatrox to stay in fights longer and deal more damage over time."
}},
{{
"champion": "Zed",
"role": "middle",
"items": ["Duskblade of Draktharr", "Serylda's Grudge", "The Collector", "Youmuu's Ghostblade", "Edge of Night", "Guardian Angel"],
"runes": ["Electrocute", "Sudden Impact", "Eyeball Collection", "Ravenous Hunter", "Presence of Mind", "Coup de Grace"],
"description": "This build focuses on burst damage and lethality, allowing Zed to assassinate squishy targets quickly."
}},
...
]
}}
```
Output schema:
```
{output_schema}
```
Output:
"""
# プロンプト
PROMPT = ChatPromptTemplate.from_template(PROMPT_TEMPLATE)
# LLM
llm = ChatVertexAI(
model_name="gemini-1.5-pro",
)
# 出力パーサー
output_parser = PydanticOutputParser[ChampionBuildList](
pydantic_object=ChampionBuildList,
)
# プロンプト、LLM、出力パーサーを chain として繋げる
chain: RunnableSerializable[Dict[str, Any], ChampionBuildList] = (
RunnableParallel(
{
"champions": itemgetter("champions"),
"items": itemgetter("items"),
"output_schema": lambda _: json.dumps(
ChampionBuildList.model_json_schema()
),
}
)
| PROMPT
| llm
| output_parser
)
# chain を実行
result = chain.invoke(
input={
"champions": json.dumps([champion.model_dump_json() for champion in champions]),
"items": json.dumps([item.model_dump_json() for item in items]),
},
)
# 結果を出力
print(result.model_dump_json(indent=4))
結果
LLM にビルドを考えてもらうことに成功しました。様々なユニークなビルドが提案されました。
ダリウス (Darius) Jungle に関しては、あまり一般的ではありませんが自分のお気に入りのビルドに近いです。
しかし、アイテムの情報が古いものになっている (削除されたアイテムが含まれる) など、不確実な部分もあります。
結果
{
"builds": [
{
"champion": "Ahri",
"description": "This off-meta build turns Ahri into a mobile support with strong poke and utility. The combination of Imperial Mandate, Shurelya's Battlesong, and Ardent Censer provides a potent boost to allied damage, while Staff of Flowing Water and Redemption offer additional healing and shielding. Runes like Summon Aery and Scorch enhance her poke potential, while Presence of Mind ensures she has the mana to spam her abilities.",
"items": [
"Imperial Mandate",
"Shurelya's Battlesong",
"Ardent Censer",
"Ionian Boots of Lucidity",
"Staff of Flowing Water",
"Redemption"
],
"role": "support",
"runes": [
"Summon Aery",
"Manaflow Band",
"Transcendence",
"Scorch",
"Presence of Mind",
"Coup de Grace"
]
},
{
"champion": "Akali",
"description": "This high-risk, high-reward build transforms Akali into a powerful magic damage jungler with high burst and mobility. Night Harvester and Lich Bane allow her to quickly clear camps and deal significant burst damage, while Rabadon's Deathcap and Void Staff maximize her ability power. Zhonya's Hourglass offers a critical defensive option. Runes like Dark Harvest and Ravenous Hunter synergize with her playstyle, while Transcendence and Gathering Storm provide scaling.",
"items": [
"Night Harvester",
"Sorcerer's Shoes",
"Lich Bane",
"Rabadon's Deathcap",
"Void Staff",
"Zhonya's Hourglass"
],
"role": "jungle",
"runes": [
"Dark Harvest",
"Sudden Impact",
"Eyeball Collection",
"Ravenous Hunter",
"Transcendence",
"Gathering Storm"
]
},
{
"champion": "Alistar",
"description": "This tanky build focuses on turning Alistar into a disruptive force in the mid lane. Sunfire Aegis, Thornmail, and Demonic Embrace provide him with high damage and tankiness, while Mercury's Treads, Force of Nature, and Abyssal Mask offer resilience against magic damage. Aftershock and Font of Life synergize with his engage potential, while Second Wind and Overgrowth provide sustain. Transcendence and Gathering Storm offer scaling.",
"items": [
"Sunfire Aegis",
"Thornmail",
"Demonic Embrace",
"Mercury's Treads",
"Force of Nature",
"Abyssal Mask"
],
"role": "middle",
"runes": [
"Aftershock",
"Font of Life",
"Second Wind",
"Overgrowth",
"Transcendence",
"Gathering Storm"
]
},
{
"champion": "Amumu",
"description": "This build utilizes Amumu's natural tankiness to make him a surprisingly effective bottom laner. Sunfire Aegis, Thornmail, and Demonic Embrace provide him with damage and tankiness, while Plated Steelcaps, Force of Nature, and Abyssal Mask offer resilience against magic damage. Aftershock and Font of Life synergize with his engage potential, while Conditioning and Overgrowth offer additional tankiness. Triumph and Legend: Tenacity boost his survivability in teamfights.",
"items": [
"Sunfire Aegis",
"Thornmail",
"Demonic Embrace",
"Plated Steelcaps",
"Force of Nature",
"Abyssal Mask"
],
"role": "bottom",
"runes": [
"Aftershock",
"Font of Life",
"Conditioning",
"Overgrowth",
"Triumph",
"Legend: Tenacity"
]
},
{
"champion": "Annie",
"description": "This unique build allows Annie to function as a burst mage jungler. Predator grants her exceptional ganking potential, while Cheap Shot and Eyeball Collection amplify her burst damage. Night Harvester, Rabadon's Deathcap, and Void Staff maximize her ability power, while Zhonya's Hourglass and Morellonomicon offer defensive options. Relentless Hunter provides movement speed for roaming, and Absolute Focus and Gathering Storm offer scaling.",
"items": [
"Night Harvester",
"Sorcerer's Shoes",
"Rabadon's Deathcap",
"Void Staff",
"Zhonya's Hourglass",
"Morellonomicon"
],
"role": "jungle",
"runes": [
"Predator",
"Cheap Shot",
"Eyeball Collection",
"Relentless Hunter",
"Absolute Focus",
"Gathering Storm"
]
},
{
"champion": "Ashe",
"description": "This build focuses on Ashe's long range poke and utility in the mid lane. Imperial Mandate, Liandry's Anguish, and Rylai's Crystal Scepter amplify her poke and slow enemies, while Ionian Boots of Lucidity and Morellonomicon provide cooldown reduction and Grievous Wounds. Arcane Comet and Scorch enhance her poke, while Manaflow Band and Biscuit Delivery offer mana sustain. Transcendence and Cosmic Insight boost her ability haste and summoner spell cooldown reduction.",
"items": [
"Imperial Mandate",
"Liandry's Anguish",
"Rylai's Crystal Scepter",
"Ionian Boots of Lucidity",
"Morellonomicon",
"Zhonya's Hourglass"
],
"role": "middle",
"runes": [
"Arcane Comet",
"Manaflow Band",
"Transcendence",
"Scorch",
"Biscuit Delivery",
"Cosmic Insight"
]
},
{
"champion": "Aurelion Sol",
"description": "This build allows Aurelion Sol to function as a poke support who scales well into the late game. Imperial Mandate, Ardent Censer, and Athene's Unholy Grail amplify his poke and support his carry, while Redemption and Mikael's Blessing offer additional utility. Summon Aery and Scorch enhance his poke potential, while Presence of Mind ensures he has the mana to spam his abilities. Transcendence and Coup de Grace provide scaling.",
"items": [
"Imperial Mandate",
"Ardent Censer",
"Athene's Unholy Grail",
"Ionian Boots of Lucidity",
"Redemption",
"Mikael's Blessing"
],
"role": "support",
"runes": [
"Summon Aery",
"Manaflow Band",
"Transcendence",
"Scorch",
"Presence of Mind",
"Coup de Grace"
]
},
{
"champion": "Azir",
"description": "This unconventional build focuses on Azir's sustained damage and control in the jungle. Liandry's Anguish, Demonic Embrace, and Rylai's Crystal Scepter synergize with his soldiers to deal significant damage over time and slow enemies, while Nashor's Tooth provides additional attack speed and on-hit damage. Zhonya's Hourglass offers a critical defensive option. Conqueror, Presence of Mind, and Legend: Tenacity boost his survivability in extended fights, while Transcendence and Gathering Storm provide scaling.",
"items": [
"Liandry's Anguish",
"Demonic Embrace",
"Rylai's Crystal Scepter",
"Sorcerer's Shoes",
"Nashor's Tooth",
"Zhonya's Hourglass"
],
"role": "jungle",
"runes": [
"Conqueror",
"Presence of Mind",
"Legend: Tenacity",
"Coup de Grace",
"Transcendence",
"Gathering Storm"
]
},
{
"champion": "Bard",
"description": "This highly mobile build transforms Bard into a burst mage jungler, utilizing his chimes and portals for quick rotations and surprise ganks. Runic Echoes allows for efficient camp clearing, while Lich Bane adds burst damage to his auto attacks after using abilities. Rabadon's Deathcap and Void Staff maximize his magic damage, while Zhonya's Hourglass offers a critical defensive option. Electrocute, Cheap Shot, and Eyeball Collection provide burst damage, while Ravenous Hunter, Transcendence, and Gathering Storm offer sustain and scaling.",
"items": [
"Runic Echoes",
"Sorcerer's Shoes",
"Lich Bane",
"Rabadon's Deathcap",
"Void Staff",
"Zhonya's Hourglass"
],
"role": "jungle",
"runes": [
"Electrocute",
"Cheap Shot",
"Eyeball Collection",
"Ravenous Hunter",
"Transcendence",
"Gathering Storm"
]
},
{
"champion": "Blitzcrank",
"description": "This build focuses on Blitzcrank's surprising mobility and engage potential in the jungle. Cinderhulk provides health and sustain, Mobility Boots enhance his roaming speed, while Dead Man's Plate and Thornmail add damage and tankiness. Warmog's Armor and Force of Nature further increase his survivability. Predator allows him to quickly close in on gank targets, while Cheap Shot and Eyeball Collection amplify his burst damage. Relentless Hunter provides additional movement speed for ganks, while Triumph and Legend: Tenacity increase his survivability in teamfights.",
"items": [
"Cinderhulk",
"Mobility Boots",
"Dead Man's Plate",
"Thornmail",
"Warmog's Armor",
"Force of Nature"
],
"role": "jungle",
"runes": [
"Predator",
"Cheap Shot",
"Eyeball Collection",
"Relentless Hunter",
"Triumph",
"Legend: Tenacity"
]
},
{
"champion": "Brand",
"description": "This build capitalizes on Brand's powerful area-of-effect damage and turns him into a strong, magic-damage jungler. Runic Echoes allows for efficient camp clearing, while Liandry's Anguish amplifies his burn damage, especially against tankier targets. Rabadon's Deathcap and Void Staff maximize his magic damage output, while Morellonomicon provides Grievous Wounds to counter healing. Dark Harvest synergizes well with his burst damage, and Cheap Shot, Eyeball Collection, and Ravenous Hunter enhance his damage output. Transcendence and Gathering Storm offer scaling.",
"items": [
"Runic Echoes",
"Sorcerer's Shoes",
"Liandry's Anguish",
"Rabadon's Deathcap",
"Void Staff",
"Morellonomicon"
],
"role": "jungle",
"runes": [
"Dark Harvest",
"Cheap Shot",
"Eyeball Collection",
"Ravenous Hunter",
"Transcendence",
"Gathering Storm"
]
},
{
"champion": "Braum",
"description": "This build utilizes Braum's natural tankiness and crowd control to make him a potent engage tank in the jungle. Cinderhulk provides health and sustain for jungling, Mobility Boots enhance his ganking speed, while Dead Man's Plate and Thornmail add damage and tankiness. Warmog's Armor and Force of Nature further bolster his survivability. Aftershock synergizes well with his engage, while Font of Life provides extra utility for his team. Conditioning and Overgrowth offer additional tankiness, while Triumph and Legend: Tenacity enhance his survivability in teamfights.",
"items": [
"Cinderhulk",
"Mobility Boots",
"Dead Man's Plate",
"Thornmail",
"Warmog's Armor",
"Force of Nature"
],
"role": "jungle",
"runes": [
"Aftershock",
"Font of Life",
"Conditioning",
"Overgrowth",
"Triumph",
"Legend: Tenacity"
]
},
{
"champion": "Caitlyn",
"description": "This off-meta build turns Caitlyn into a long-range poke support with powerful utility. Glacial Augment synergizes with her traps and net, creating potent slows for her team to follow up. Imperial Mandate amplifies allied damage on slowed targets, while Galeforce and Rapid Firecannon offer mobility and additional poke damage. Runes like Magical Footwear, Biscuit Delivery, and Cosmic Insight enhance her laning phase and provide sustain.",
"items": [
"Imperial Mandate",
"Galeforce",
"Rapid Firecannon",
"Ionian Boots of Lucidity",
"Mortal Reminder",
"Guardian Angel"
],
"role": "support",
"runes": [
"Glacial Augment",
"Magical Footwear",
"Biscuit Delivery",
"Cosmic Insight",
"Absolute Focus",
"Gathering Storm"
]
},
{
"champion": "Camille",
"description": "This build focuses on Camille's ability to duel and thrive in extended fights as a bottom laner. Divine Sunderer, Trinity Force, and Sterak's Gage provide a mix of damage, sustain, and tankiness, allowing her to trade effectively and survive burst. Plated Steelcaps, Death's Dance, and Guardian Angel offer additional survivability. Grasp of the Undying, Shield Bash, and Bone Plating enhance her laning phase and sustain, while Triumph and Legend: Alacrity provide combat stats. Overgrowth increases her late-game tankiness.",
"items": [
"Divine Sunderer",
"Plated Steelcaps",
"Trinity Force",
"Sterak's Gage",
"Death's Dance",
"Guardian Angel"
],
"role": "bottom",
"runes": [
"Grasp of the Undying",
"Shield Bash",
"Bone Plating",
"Overgrowth",
"Triumph",
"Legend: Alacrity"
]
},
{
"champion": "Cassiopeia",
"description": "This build focuses on maximizing Cassiopeia's damage over time and crowd control as a support, enabling her to harass and lock down enemies. Liandry's Anguish, Rylai's Crystal Scepter, and Demonic Embrace enhance her damage output, while Morellonomicon provides Grievous Wounds to counter healing. Zhonya's Hourglass offers a critical defensive option. Summon Aery and Scorch enhance her poke potential, while Presence of Mind ensures she has the mana to sustain her abilities. Transcendence and Coup de Grace offer scaling.",
"items": [
"Liandry's Anguish",
"Rylai's Crystal Scepter",
"Morellonomicon",
"Ionian Boots of Lucidity",
"Demonic Embrace",
"Zhonya's Hourglass"
],
"role": "support",
"runes": [
"Summon Aery",
"Manaflow Band",
"Transcendence",
"Scorch",
"Presence of Mind",
"Coup de Grace"
]
},
{
"champion": "Cho'Gath",
"description": "This build capitalizes on Cho'Gath's tankiness and crowd control to make him a formidable peel support. Knight's Vow allows him to redirect damage to himself and protect his carry, Frozen Heart and Thornmail offer high armor and reduce enemy attack speed, while Plated Steelcaps and Abyssal Mask provide magic resist. Aftershock synergizes with his knock-up, Font of Life offers extra utility, and Conditioning and Overgrowth increase his tankiness. Triumph and Legend: Tenacity boost his survivability in teamfights.",
"items": [
"Knight's Vow",
"Frozen Heart",
"Thornmail",
"Plated Steelcaps",
"Abyssal Mask",
"Warmog's Armor"
],
"role": "support",
"runes": [
"Aftershock",
"Font of Life",
"Conditioning",
"Overgrowth",
"Triumph",
"Legend: Tenacity"
]
},
{
"champion": "Corki",
"description": "This build focuses on Corki's poke damage and utility in the support role. Imperial Mandate, Ardent Censer, and Athene's Unholy Grail amplify his poke and healing potential, while Ionian Boots of Lucidity, Redemption, and Mikael's Blessing provide additional utility for his team. Summon Aery and Scorch enhance his poke, while Presence of Mind ensures he has the mana to sustain his abilities. Transcendence and Coup de Grace provide scaling.",
"items": [
"Imperial Mandate",
"Ardent Censer",
"Athene's Unholy Grail",
"Ionian Boots of Lucidity",
"Redemption",
"Mikael's Blessing"
],
"role": "support",
"runes": [
"Summon Aery",
"Manaflow Band",
"Transcendence",
"Scorch",
"Presence of Mind",
"Coup de Grace"
]
},
{
"champion": "Darius",
"description": "This bruiser build allows Darius to effectively jungle and dominate teamfights. Goredrinker and Black Cleaver provide sustain, damage, and armor shred, while Sterak's Gage offers survivability. Mercury's Treads, Dead Man's Plate, and Thornmail provide a mix of mobility, tankiness, and damage reflection. Conqueror, Triumph, and Last Stand synergize with his fighting style, while Ravenous Hunter and Taste of Blood enhance his sustain.",
"items": [
"Goredrinker",
"Black Cleaver",
"Sterak's Gage",
"Mercury's Treads",
"Dead Man's Plate",
"Thornmail"
],
"role": "jungle",
"runes": [
"Conqueror",
"Triumph",
"Legend: Tenacity",
"Last Stand",
"Ravenous Hunter",
"Taste of Blood"
]
},
{
"champion": "Diana",
"description": "This high-attack speed build turns Diana into an aggressive on-hit carry for the bottom lane. Kraken Slayer provides on-hit damage, Berserker's Greaves, Runaan's Hurricane, and Phantom Dancer maximize her attack speed, while Infinity Edge and Guardian Angel offer damage and survivability. Lethal Tempo synergizes with her attack speed, Presence of Mind ensures she has the mana to spam abilities, and Legend: Alacrity further boosts her attack speed. Triumph and Legend: Bloodline provide sustain and survivability.",
"items": [
"Kraken Slayer",
"Berserker's Greaves",
"Runaan's Hurricane",
"Infinity Edge",
"Phantom Dancer",
"Guardian Angel"
],
"role": "bottom",
"runes": [
"Lethal Tempo",
"Presence of Mind",
"Legend: Alacrity",
"Coup de Grace",
"Triumph",
"Legend: Bloodline"
]
}
]
}
実際に使ってみた
3 連敗しました。
まとめ
LLM に大きいデータをまとめて与えて、LoL のビルドを考えてもらうことができました。
問題点として、アイテムの情報が古いものになっているなど、不確実な部分もありました。また、ビルドの提案はユニークなものが多かったですが、実際に使うと弱かったです。
LoL で勝ちたい人は、op.gg などの統計サイトで最新のビルドを確認することをおすすめします。
また、ユニークなビルドを試すときには、チームメイトに迷惑をかけないように注意しましょう。
Discussion