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

本文主要是介绍非常有趣的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 = 0LLM_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

这篇关于非常有趣的AI应用-用大语言模型来玩星际争霸2(附代码链接)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/749734

相关文章

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应