我的常用指令:1.过来,2.砍树
在 Mindcraft 中,Agent 的"技能"分为三类:技能库函数、动作命令(!actions)和查询命令(!queries)。它们通过命令系统或代码生成被 LLM 调用。
1. 技能库函数(skills.*)
位于 src/agent/library/skills.js,由 SkillLibrary 管理并在代码生成时通过 $CODE_DOCS 注入提示。典型技能包括:
skills.goToPosition/skills.goToPlayer:导航到坐标或玩家skills.collectBlock:采集指定方块skills.craftRecipe/skills.smeltItem:合成与熔炼skills.placeBlock/skills.breakBlockAt:放置与破坏方块skills.attackEntity/skills.defendSelf:攻击与自卫skills.pickupNearbyItems:拾取掉落物skills.goToBed:上床睡觉skills.moveAway/skills.avoidEnemies:移动与躲避skills.wait:等待skills.viewChest:查看箱子skills.discard:丢弃物品skills.rememberPlace/skills.recallPlace:记忆与召回位置(通过 MemoryBank)
技能库在 SkillLibrary.initSkillLibrary 初始化,并根据提示相似度检索相关技能文档(getRelevantSkillDocs) skill_library.js:13-33 skill_library.js:40-92 。
2. 动作命令(!actions)
在 src/agent/commands/actions.js 中定义,通过 !commandName 调用,通常包装技能库函数或执行复杂流程。主要命令:
!newAction:让 LLM 动态生成并执行代码(需allow_insecure_coding=true) actions.js:30-51!goToPlayer/!followPlayer:前往/跟随玩家!goToCoordinates:前往坐标!searchForBlock/!searchForEntity:搜索方块/实体(开挂用后台的)!collectBlocks:采集方块!craftRecipe/!smeltItem/!clearFurnace:合成、熔炼、清炉!placeHere:在当前位置放置方块!attack/!attackPlayer:攻击!goToBed:睡觉!stay:停留!rememberHere/!goToRememberedPlace:记忆位置/前往记忆位置!setMode:开启/关闭自动行为模式!goal/!endGoal:设置/结束持续目标!stop/!stfu/!restart/!clearChat:停止、静音、重启、清聊天
3. 查询命令(!queries)
在 src/agent/commands/queries.js 中定义,用于获取信息而不执行长时间动作。典型命令:
!stats:状态(生命、饥饿、位置、经验)!inventory:物品栏!nearbyBlocks/!entities:附近方块/实体!lookAtPlayer/!lookAtPosition:看向玩家/位置并截图分析(需allow_vision=true)!searchWiki:查询 Minecraft Wiki
4. 自动行为模式(modes)
虽然不称为"技能",但 src/agent/modes.js 中的模式(如 self_preservation、self_defense、hunting、item_collecting)会以 300ms 周期自动触发技能库函数,实现被动行为 modes.js:24-89 modes.js:139-218 。
技能非常之多,ai什么都不用学直接调用就完了
可以开挂导航到木头旁边砍木头,把动作维度从视觉判断环境判断直接拉到一维的自动指令选择
会被方块卡住,不是因为动不了而是预定的算法有点问题,
攻击力非常之强可以空手没装备单挑两只白骷髅+蜘蛛,调用接口的开挂
但是新环境就废了,没有预定的代码,不泛化
没人叫他做什么他就不动等怪来打他(因为没有分子级的操作全是指令)
没有体现长期记忆
优点就是,ai会回复,带上动作的对话ai还是比较上头的(不谈动作实现的话)
而且ai是动作全覆盖的(不谈动作实现的话)
而且指令的话不会占用键盘输入,比如前后左右和鼠标
砍树也是一维的调用接口
不是。Mindcraft 代理砍树不使用鼠标,而是通过程序调用 Mineflayer 的网络接口实现。
skills.collectBlock会先自动装备合适工具(bot.tool.equipForBlock),然后根据方块类型调用bot.dig(block)或bot.collectBlock.collect(block)来破坏原木,最后调用pickupNearbyItems拾取掉落物 skills.js:480-511 。!collectBlocks命令只是对skills.collectBlock的包装,同样不涉及鼠标操作 actions.js:256-265 。
Notes
- Mineflayer 的
bot.dig是通过发送客户端数据包到服务器来执行挖掘,而非模拟鼠标点击。 - 如果工具不匹配,会提示"Don't have right tools to harvest" skills.js:490-493 。