非常有趣的AI应用-用大语言模型来玩星际争霸2(附代码链接)

非常有趣的AI应用-用大语言模型来玩星际争霸2(附代码链接)

偶然看到的,比较有意思,分享一下:

GitHub地址:Large-Language-Models-play-StarCraftII
arxiv:Large Language Models Play StarCraft II…

1、简介

偶然看到的一个使用大语言模型LLM来玩星际争霸2的应用,作为一个星际争霸的十年老粉,我直接狂喜,来简单试验一下,在此分享给大家。

先简单介绍一下这是如何实现的,从直觉上来讲,就是把游戏信息以文字的形式发送给大语言模型(通过api接口),然后完全根据大语言模型(GPT 3.5)反馈的建议进行决策
在这里插入图片描述
简单分析一下这样的优势,大语言模型在全局决策上更具备优势,能够理解游戏的不同进程并给出不同阶段应该做什么的建议。此外,大语言模型能够根据对方的兵种给出克制出兵(检测到蟑螂就出不朽者等等),主动的去侦察等等。如果大家对星际争霸的AI有所了解的话,当时暴捶职业选手的AlphaStar玩的神族就是单纯的操作怪,只会闪追自曝球,完全是靠蛮力操作取胜,不具备大局观什么的。

这样做也有劣势,由于完全依赖大语言模型进行决策,agent会极大的丧失游戏的细节,比如说部队操作的细节、农民挖矿的分配(超过16个农民挖晶体矿)等等,更好的方式无疑是将强化学习RL和大语言模型LLM结合。此外,该github代码的实现上,会频繁的和LLM模型交互,在交互的等待过程中,游戏的进程是暂停的,大家可以想象一下自己玩GPT的场景,我信息发过去还得等对面生成半天呢。因此,LLM玩一次游戏的实时性较差,需要三四个小时左右的时间,非常慢。

2、windows部署教程

2.1 anaconda环境创建

作者也给出了自己的教程,但是好像是在linux环境下的,requirement里面有些东西我pip安装不了,因此在此给出我自己的实践过程,我的系统是window11+4070。
首先用anaconda创建一个环境,py版本用3.10:
在这里插入图片描述
用pycharm打开工程,选择刚刚创建的环境作为解释器:
在这里插入图片描述
从conda中打开刚才创建的环境的终端,cd到工程的目录,使用pip install -r requirements.txt进行依赖的安装:
在这里插入图片描述
原来的requirements.txt有一些linux的包,安装会报错,非常建议使用下面我的requirements.txt来在window下安装,文件放在文章最后的附录。

2.2 星际争霸2下载

暴雪跑路了,星际争霸下载要科学上网,参考如何下载战网国际服丨简单教程丨魔兽世界亚服丨守望先锋2亚服丨炉石传说亚服

如果战网下载卡45%,需要清注册表+改地址,参考
https://www.bilibili.com/read/cv26026102/
https://www.bilibili.com/read/cv22398822/

然后把下载下来的工程文件里面maps里面的地图复制到星际争霸的主目录,如果星际争霸的主目录没有Maps文件夹就创建一个:
在这里插入图片描述
在这里插入图片描述
弄完最后打开星际争霸看看能不能玩,打开需要加速器,我用的雷神加速器

2.3 运行前的修改

我们运行test_the_env.py就够了,里面的多线程是一下子开好多游戏,对单局游戏没有加速作用。而且由于要和chatgpt交互,要用api,5美元一把游戏都不够用的,同时开两把也太奢侈了。

原来的代码有两处需要改动,否则无法运行
其一是wandb.login(key=‘your key’),key要用自己的wandb账号的,我已经在自己电脑上登录过了,这句话也可以注释掉的。

def gpt_agent_test(agent, env):
    wandb.login(key='your key')
    config = {
        "LLM_model_name": "gpt-3.5-turbo",
        "LLM_temperature": 0,
        "action_interval": 10,
        "request_delay": 0.2,
        "chunk_window": 5,
        "action_window": 10,
        "action_mix_rate": 0.5,
        "last_k": 5,

    }

另外就是要设置自己的gpt的api和base,这个比较麻烦了,由于我是穷学生外加原来的openai送的18美元过期了,只能淘宝买了。

    """
    You need to set your model_name,api_key,api_base,temperature,
    """
    LLM_model_name = "gpt-3.5-turbo-16k"
    LLM_temperature = 0
    LLM_api_key = ""
    LLM_api_base = ""

推荐下面的链接,淘宝店铺名字Ai数码店(和我没关系,5美元的中转3.5api就行,不限次数,3块钱人民币就能用了):

【淘宝】https://m.tb.cn/h.5KVoHSq?tk=jYvgW7q7dum CZ3457 「3.5 4.0 api key 5刀 120刀 全新未使用 独享 国内 apikey秘钥」
点击链接直接打开 或者 淘宝搜索直接打开

买其他API一定要注意,5美元的额度买起来要慎重,可能是免费的,每天只能发200个消息,这样一局都打不完

如果使用我推荐的淘宝店铺(淘宝店家会给使用教程:https://oneapi.xty.app/),api的base需要小小修改一下
在这里插入图片描述
例如(这个key没额度了,大家不用手敲白嫖哦):
在这里插入图片描述
如果使用官方买的api,base就是默认的,如:
在这里插入图片描述

2.4 运行的tips

第一次运行会从外面下载东西,注意科学上网

如果用的是openai官方api,注意全程代理打开

如果用的国内中转,如上面我推荐的,运行的时候(除第一次)不用科学上网。

推荐国内中转,速度快一点,游戏玩的也稍微快一点

我的游戏回放在C:\Users\24762\Documents\StarCraft II\Replays\Multiplayer,好像一局游戏玩结束才会有回放,中途退出啥也没有,建议要中途退出之前保存(save)一下。

3、实战效果

打的艰难电脑,打输了(我钻石水平可以血虐作弊三电脑)。主要还是细节太差了,追农民到别人家送了一波兵,不然还能赢的,科技攀的也慢,感觉需要给CHAT GPT手动调教下才行:

CSDN的链接上传视频好慢,稍等哦:

非常有趣的AI应用-用大语言模型来玩星际争霸2-实战效果

LLM大概两秒钟就要指导一次:
在这里插入图片描述

看看LLM是如何评价要输了的:

星际争霸2游戏分析\ 1游戏概述:在11点07分的比赛时间,我们的现状是具有挑战性的。我们有33名工人,185种矿物,2206种天然气。我们的补给上限是47,剩下10,我们的军队补给是2。我们有一个Nexus,四个电塔,四个气体建筑,八个曲速门,一个控制论核心,和一个机器人设施。当前游戏阶段:基于游戏时间和资源可用性,我们处于游戏中期阶段。3.1单位和建筑:我们有一个有限的军队,由33个探测器和1个潜行者组成。我们的基础设施包括重要的建筑,如Nexus,塔塔和曲速之门,但我们缺乏多样性的单位组成和先进的科技结构。3.2经济:我们的天然气储量丰富,但我们的矿产数量很低。工人供给也相对较低,影响了我们的资源收集率。3.3科技:我们已经完成了星门的研究,但没有证据表明有先进的科技单位或进一步的研究。缺乏先进的技术结构限制了我们的战略选择和单位的多样性。我们的战略:我们目前的战略似乎集中在基本的军队组成和有限的技术发展上。这可能使我们容易受到更多样化的敌人力量和先进战略的攻击。敌人的策略:敌人有混合的虫族单位,包括异形,督军,小狗,蟑螂和刺蛇。这表明了多样化和潜在强大的军队组成,表明了游戏中期单位多样性和潜在空中优势的重点。关键信息:目前最关键的方面是我们有限的单位组成和技术多样性。我们未来的成功取决于我们如何设法迅速使我们的军队和技术能力多样化,以对抗敌人的多样化力量。我们的战略:我们应该把重点放在快速多样化我们的军队组成和技术能力上,以对抗敌人的多样化力量。优先发展防空能力。单位和建筑:考虑到敌人的多样化单位构成,使我们的军队多样化是至关重要的。考虑训练防空单位和建造额外的科技结构来解锁更先进的单位。经济:专注于增加矿物收集,以支持不同单位和科技结构的生产。考虑扩展到新的资源位置来促进这一点。\n\n4。技术:当前的任务是建造额外的技术结构,如机器人湾或星门,以解锁更高级的单位。研究防空能力也应该是一个优先事项。这一修订后的战略应有助于解决当前的限制,并使我们更好地为即将到来的挑战做好准备。\n\n决策:\n0:建造星门\n1:训练凤凰\n2:建造机器人\n3:研究PHOENIXRANGEUPGRADE\n4: CHRONOBOOST CYBERNETICSCORE"]

附录requirements.txt

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: win-64
addict==2.4.0
aiohttp==3.8.5
aiosignal==1.3.1
aliyun-python-sdk-core==2.14.0
aliyun-python-sdk-kms==2.16.2
annotated-types==0.6.0
anyio==3.7.1
appdirs==1.4.4
async-timeout==4.0.3
attrs==23.1.0
backoff==2.2.1
bcrypt==4.0.1
brotli==1.1.0
burnysc2==6.5.0
# bzip2==1.0.8
# ca-certificates==2023.05.30
certifi==2023.7.22
cffi==1.15.1
charset-normalizer==3.2.0
chroma-hnswlib==0.7.3
chromadb==0.4.13
click==8.1.7
cloudpickle==2.2.1
colorama==0.4.6
coloredlogs==15.0.1
contourpy==1.2.0
crcmod==1.7
cryptography==41.0.5
cssselect2==0.7.0
cycler==0.12.1
datasets==2.13.0
dill==0.3.6
docker-pycreds==0.4.0
einops==0.7.0
et-xmlfile==1.1.0
exceptiongroup==1.1.3
fastapi==0.103.2
filelock==3.12.4
flatbuffers==23.5.26
fonttools==4.44.0
frozenlist==1.4.0
fsspec==2023.9.2
gast==0.5.4
gevent==23.7.0
gitdb==4.0.10
gitpython==3.1.32
greenlet==2.0.2
gym==0.26.2
gym-notices==0.0.8
h11==0.14.0
html5lib==1.1
httptools==0.6.0
huggingface-hub==0.17.3
humanfriendly==10.0
idna==3.4
importlib-metadata==6.8.0
importlib-resources==6.1.0
jinja2==3.1.2
jmespath==0.10.0
joblib==1.3.2
kiwisolver==1.4.5
# libffi==3.4.4
loguru==0.6.0
markdown2==2.4.10
markupsafe==2.1.3
matplotlib==3.8.1
modelscope==1.9.4
monotonic==1.6
mpmath==1.3.0
mpyq==0.2.5
multidict==6.0.4
multiprocess==0.70.14
nest-asyncio==1.5.7
networkx==3.1
nltk==3.8.1
numpy==1.26.2
onnxruntime==1.16.0
openai==0.27.9
openpyxl==3.1.2
# openssl==1.1.1v
oss2==2.18.3
overrides==7.4.0
packaging==23.2
pandas==2.1.2
pango==0.0.1
pathtools==0.1.2
pillow==10.0.1
# pip==23.2.1
platformdirs==3.11.0
portpicker==1.6.0
posthog==3.0.2
protobuf==3.20.3
psutil==5.9.5
pulsar-client==3.3.0
pyarrow==14.0.0
pycparser==2.21
pycryptodome==3.19.0
pydantic==2.4.2
pydantic-core==2.10.1
pydyf==0.8.0
pyparsing==3.1.1
pyphen==0.14.0
pypika==0.48.9
pyreadline3==3.4.1
# python==3.10.0
python-dateutil==2.8.2
python-dotenv==1.0.0
pytz==2023.3.post1
pyyaml==6.0.1
regex==2023.10.3
requests==2.31.0
s2clientprotocol==5.0.11.90870.0
safetensors==0.4.0
sc2reader==1.8.0
scikit-learn==1.3.1
scipy==1.11.2
seaborn==0.13.0
sentence-transformers==2.2.2
sentencepiece==0.1.99
sentry-sdk==1.29.2
setproctitle==1.3.2
setuptools==68.0.0
simplejson==3.19.2
six==1.16.0
smmap==5.0.0
sniffio==1.3.0
sortedcontainers==2.4.0
# sqlite==3.41.2
starlette==0.27.0
sympy==1.12
threadpoolctl==3.2.0
tinycss2==1.2.1
# tk==8.6.12
tokenizers==0.14.1
tomli==2.0.1
torch==2.1.0
torchvision==0.16.0
tqdm==4.66.1
transformers==4.34.0
typer==0.9.0
typing-extensions==4.8.0
tzdata==2023.3
urllib3==2.0.4
uvicorn==0.23.2
# vc==14.2
# vs2015_runtime==14.27.29016
wandb==0.15.9
watchfiles==0.20.0
weasyprint==60.1
webencodings==0.5.1
websocket==0.2.1
websockets==11.0.3
wheel==0.38.4
win32-setctime==1.1.0
xlsxwriter==3.1.9
xxhash==3.4.1
# xz==5.4.2
yapf==0.40.2
yarl==1.9.2
zipp==3.17.0
# zlib==1.2.13
zope-event==5.0
zope-interface==6.0
zopfli==0.2.3

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
抱歉,我是一名自然语言处理模型,无法为您生成完整的代码。但我可以给您一些提示和建议。 对于一个星际争霸2赛事网站,您需要考虑以下几个方面: 1. 网站的功能需求:包括比赛日程表、比分、选手信息、比赛回放等等。 2. 网站的页面设计:需要考虑整体布局、色彩搭配、字体大小等等,可以使用Dreamweaver等工具进行页面设计。 3. 数据库设计:需要考虑如何存储赛事信息、选手信息、比分等数据,可以使用MySQL等数据库管理系统进行设计。 以下是一些可能有用的代码片段: 1. 连接MySQL数据库 ```php <?php $servername = "localhost"; $username = "username"; $password = "password"; // 创建连接 $conn = new mysqli($servername, $username, $password); // 检测连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "连接成功"; ?> ``` 2. 插入数据到MySQL数据库 ```php <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检测连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 插入数据 $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; if ($conn->query($sql) === TRUE) { echo "新记录插入成功"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); ?> ``` 3. 查询MySQL数据库中的数据 ```php <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检测连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 查询数据 $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 结果"; } $conn->close(); ?> ``` 希望这些代码片段能对您有所帮助,但请注意,这只是一个简单的示例,实际的网站开发需要更加复杂和全面的考虑。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怡步晓心l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值