非常有趣的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 报:“Unable to load history…”如何处理?

ChatGPT界面出现&#xff1a;“Unable to load history…” 说明&#xff1a;无法加载历史记录。。。 原因&#xff1a; 一般是代理的问题&#xff0c;网络加载延迟严重&#xff0c;也可能是官方请求过多&#xff0c;造成响应不及时。 解决&#xff1a; 出现这个问题时&#…

新三板操作指南!哪家证券公司开通新三板交易佣金费率最低?

新三板操作指南&#xff1a;掌握规则&#xff0c;赢得先机&#xff01; 随着中国资本市场的蓬勃发展&#xff0c;新三板市场日益成为投资者关注的焦点。然而&#xff0c;对于许多新手投资者来说&#xff0c;新三板市场的交易规则和流程可能较为陌生。本文将为您详细解读新三板…

移动端开发进阶之蓝牙通讯(一)

移动端开发进阶之蓝牙通讯&#xff08;一&#xff09; 移动端进阶之蓝牙通讯需要综合考虑蓝牙版本选择、协议栈使用、服务匹配、设备连接、安全性和硬件支持等方面。 一、蓝牙版本选择 根据实际需求和应用场景选择合适的蓝牙版本&#xff1b; 1.0&#xff0c;1M/s。 2.0EDR…

线程安全的集合类

Java中提供了许多集合类&#xff0c;其中有的是线程安全的&#xff0c;有的是线程不安全的。线程安全的集合类有&#xff1a; 1. Vector&#xff1a;Vector类实现了一个动态数组&#xff0c;与ArrayList相似&#xff0c;但Vector是同步访问的 2. Stack&#xff1a;Stack是Vec…

C++ 数论相关题目(约数)

1、试除法求约数 主要还是可以成对的求约数进行优化&#xff0c;不然会超时。 时间复杂度根号n #include <iostream> #include <vector> #include <algorithm>using namespace std;int n;vector<int> solve(int a) {vector<int> res;for(int i…

leetcode 每日一题 2024年01月18日 拿出最少数目的魔法豆

题目 给定一个 正整数 数组 beans &#xff0c;其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中 拿出 一些豆子&#xff08;也可以 不拿出&#xff09;&#xff0c;使得剩下的 非空 袋子中&#xff08;即 至少还有一颗 魔法豆的袋子&#xff09;魔法豆的数目 …

保证Kafka消息有序性

一、Kafka特性 写入同一个partion分区中的数据是一定有顺序的kafka中一个消费者消费一个partion的数据&#xff0c;消费者取出数据时&#xff0c;也是有顺序的 二、保证消息Kafka消息有序性 在生产者端&#xff0c;应保证消息被写入同一分区。可以在构造消息时指定消息的key…

如何将音频转文字?4个方法帮你轻松搞定!

如何将音频转文字&#xff1f;在日常生活中&#xff0c;将音频转换为文字的应用可以带来很多便利。例如&#xff0c;在会议、讲座、课堂等场合&#xff0c;我们可以使用识别软件将语音转换为文字&#xff0c;方便记录和整理。此外&#xff0c;在语言学习、语音翻译等领域&#…

基于springboot+vue的在线拍卖系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)

目录 一、#和## 1.1#运算符 1.2## 运算符​ 二、命名约定​ 三、#undef​ 四、命令行定义​ 五、条件编译​ 六、头文件的包含​ 4.1 头文件被包含的方式&#xff1a;​ 4.1.1 本地文件包含​ Linux环境的标准头文件的路径&#xff1a;​ VS环境的标准头文件的路径&…

Vue3在点击菜单切换路由时,将ElementPlus UI库中el-main组件的内容滚动恢复到顶部

功能&#xff1a;Vue3在点击菜单切换路由时&#xff0c;将页面el-main的内容滚动到顶部&#xff0c;布局如下&#xff0c;使用UI组件库为ElementPlus 在网上搜很多都是在route.js中的router.beforeEach中使用window.scrollTop(0,0) 或 window.scrollTo(0,0) 滚动&#xff0c;但…

如何用GPT 运行python?GPT4科研应用与AI绘图及论文高效写作

详情点击链接&#xff1a;如何用GPT 运行python&#xff1f;GPT4科研应用与AI绘图及论文高效写作 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型…

SpringBoot 统计API接口用时该使用过滤器还是拦截器?

统计请求的处理时间&#xff08;用时&#xff09;既可以使用 Servlet 过滤器&#xff08;Filter&#xff09;&#xff0c;也可以使用 Spring 拦截器&#xff08;Interceptor&#xff09;。两者都可以在请求处理前后插入自定义逻辑&#xff0c;从而实现对请求响应时间的统计。 …

【前端】vue.js从入门到项目实战笔记

文章目录 第三章3.1 插值绑定&#xff08;{{}}&#xff0c; v-html&#xff09;3.1.1 文本插值3.1.2 HTML插值 3.2 属性绑定 v-bind3.2.1 指令v-bind3.2.3 类名和样式绑定 【前端目录贴】 第三章 3.1 插值绑定&#xff08;{{}}&#xff0c; v-html&#xff09; 文本插值中的代…

vue3前端开发,感受一下组合式api和VUE2选项式的差异

vue3前端开发,感受一下组合式api和VUE2选项式的差异&#xff01;今天开始&#xff0c;正式开始&#xff0c;进入学习Vue3的内容。以后代码&#xff0c;案例分享&#xff0c;都会采用组合式api的模式为大家做展示。 今天是第一节&#xff0c;带大家感受一下&#xff0c;Vue3的组…

css-盒子等样式学习

盒子居中&#xff0c;继承外层盒子的宽高 兼容性&#xff08;border-box&#xff09;将边框收到盒子内部 初始化div 不用管box-setting content-box 还原 创建为一个类 &#xff0c;让所有需要还原的类 进行继承 padding 用法表示margin上下左右边距 body 外边距&…

线程和进程的区别(从JVM角度出发)

进程与线程的区别 线程具有许多传统进程所具有的特征&#xff0c;故又称为轻型进程(Light—Weight Process)或进程元&#xff1b;而把传统的进程称为重型进程(Heavy—Weight Process)&#xff0c;它相当于只有一个线程的任务。在引入了线程的操作系统中&#xff0c;通常一个进…

linux-nfc neard 编译、安装与运行

项目github地址&#xff1a; https://github.com/linux-nfc/neard git clone地址&#xff1a; https://github.com/linux-nfc/neard.git 1.安装依赖库 clone完源码切换到目录neard里。这个项目需要依赖一下库&#xff1a; - GCC compiler - D-Bus library - GLib library …

CHAPTER 9: 《DESIGN A WEB CRAWLER》第9章 《设计一个web爬虫》

CHAPTER 9: 《DESIGN A WEB CRAWLER》第九章 设计一个web爬虫 在本章中&#xff0c;我们将重点介绍网络爬虫设计&#xff1a;一种有趣而经典的系统设计 面试问题。 网络爬虫被称为机器人或蜘蛛。它被搜索引擎广泛用于发现网络上的新内容或更新内容。内容可以是网页、图像、视频…

66.Go从零搭建一个orm框架【简版】

文章目录 一&#xff1a;前置学习1、 为什么要用orm2、Golang里面是如何原生连接MySQL的3、ORM框架构想 二: 开始造1、连接Connect2、设置/读取表名Table/GetTable3、新增/替换Insert/Replace4、条件Where5、条件OrWhere6、删除Delete7、修改Update8、查询9、设置查询字段Field…