19 KiB
Oxygen Not Included (ONI) Agent
è<EFBFBD>Œè´£
å<EFBFBD><EFBFBD>助玩家æ“<EFBFBD>作和管ç<EFBFBD>†æ¸¸æˆ?缺氧"(Oxygen Not Included),æ<C592><C3A6>供游æˆ<C3A6>知识ã€<C3A3>ç–略建议,并通过 Mod API 直接æ“<C3A6>控游æˆ<C3A6>ã€?
工程结构
oni-agent/
├── config.json # Mod 连接é…<C3A9>ç½®
├── mod/
â”? ├── mod_info.yaml # Mod 元信æ<C2A1>?â”? └── ONIAgentBridge.cs # Mod HTTP API æœ<C3A6>务 (端å<C2AF>£ 23876)
├── tools/
â”? ├── oni_api.py # Mod API 客户ç«?â”? ├── oni_analyzer.py # 游æˆ<C3A6>状æ€<C3A6>分æž?â”? └── oni_builder.py # è“<C3A8>å›¾å»ºé€ è§„åˆ?├── scripts/
â”? ├── auto_repair.sh # 连接诊æ–
â”? ├── auto_analyze.sh # 一键分æž?â”? ├── watch.sh # æŒ<C3A6>ç»ç›‘控
â”? └── setup.sh # 环境åˆ<C3A5>å§‹åŒ?├── docs/
â”? ├── MOD_DEV_GUIDE.md # Mod å¼€å<E282AC>‘指å<E280A1>?â”? └── AI_KNOWLEDGE_BASE.md # AI 知识åº?(ID注册è¡?è¯ä¹‰æ ‡ç¾)
├── skills/
� └── oni_agent.md # Agent skill 定义
└── SKILL.md # 本文�```
---
## é‡<C3A9>è¦<C3A8>概念:ç<C5A1>†è§?ONI 的数æ<C2B0>®æ¨¡åž?
### 1. å<><C3A5>æ ‡ç³?
ONI ä½¿ç”¨äºŒç»´æ–¹æ ¼ï¼ˆtile)系统。AI å¿…é¡»ç<C2BB>†è§£å<C2A3><C3A5>æ ‡ç³»æ‰<C3A6>能æ£ç¡®æ“<C3A6>作:
y â–? â”? ┌────┬────┬────â”? â”? â”?5,5)â”?6,5)â”?7,5)â”? â”? ├────┼────┼────â”? â”? â”?5,4)â”?6,4)â”?7,4)â”? â†?è¿™ä¸ªæ ¼å<C3A5> (6,4) 包å<E280A6>«ä¸€ä¸ªç”µè§£å™¨ â”? ├────┼────┼────â”? â”? â”?5,3)â”?6,3)â”?7,3)â”? â”? └────┴────┴────â”? └──────────────────────────â–?x (0,0)
- **原点 (0,0)** 在地�*左下�*
- **x è½?*å<>‘å<E28098>³å¢žåŠ ï¼?*y è½?*å<>‘上增åŠ
- æ¯<C3A6>ä¸ªæ ¼å<C3A5> (cell) 有唯一çš?(x, y) å<><C3A5>æ ‡
- 建ç‘å<E28098> 用 w×h ä¸ªæ ¼å<C3A5>,其å<C2B6><C3A5>æ ‡æ˜¯**左下角锚ç‚?*
- 世界大å°<C3A5>通过 `/api/state/game` 查询(`gridWidth` x `gridHeight`ï¼?- 典型地图: ~256 x 384 æ ?
### 2. ç<>†è§£æ ¼å<C3A5>状æ€?
æ¯<C3A6>æ ¼çš„æ•°æ<C2B0>®ç»“构如下(通过 `/api/state/cell?x=&y=` 查询):
```json
{
"x": 10, "y": 5,
"element": "Oxygen", // è¯¥æ ¼åŒ…å<E280A6>«çš„å…ƒç´ å<C2A0><C3A5>ç§? "elementState": "gas", // solid/liquid/gas/vacuum
"massKg": 1.8, // è¯¥æ ¼ä¸å…ƒç´ 的质é‡<C3A9>
"temperatureC": 23.5, // 温度(æ‘„æ°<C3A6>åº?
"hasBuilding": true, // 是å<C2AF>¦æœ‰å»ºç? "buildingName": "Electrolyzer",// 建ç‘å<E28098><C3A5>ç§°(如有)
"hasDuplicant": false, // 是å<C2AF>¦æœ‰å¤<C3A5>制人
"isVacuum": false, // 是å<C2AF>¦ä¸ºçœŸç©? "isSolid": false, // 是å<C2AF>¦ä¸ºå›ºä½? "isLiquid": false,
"isGas": true,
"isVisible": true // 是å<C2AF>¦å·²æŽ¢ç´?}
3. ç<>†è§£åœ°å›¾åŒºåŸŸ
通过 /api/state/cells?x=&y=&width=&height= 获å<C2B7>–çŸ©å½¢åŒºåŸŸçš„æ ¼å<C3A5>数组ã€?
通过 explore <x> <y> <w> <h> 命令获å<C2B7>– AI å<>‹å¥½çš„结构化摘è¦<C3A8>ï¼?- 该区域的建ç‘列表(带是å<C2AF>¦å<C2A6>¯è¿<C3A8>行)
- 该区域的å¤<EFBFBD>制人列表(带压åŠ?当å‰<C3A5>任务ï¼?- å…ƒç´ åˆ†å¸ƒç»Ÿè®¡
- æ„Ÿå…´è¶£çš„å…³é”®æ ¼å<EFBFBD>
通信方å¼<EFBFBD>
- Mod 在游æˆ<C3A6>内å<E280A6>¯åЍ HTTP æœ<C3A6>务,暴éœ?RESTful API
- 通过
http://127.0.0.1:PORT与游æˆ<C3A6>通信 - 端å<EFBFBD>£åœ?
config.jsonä¸é…<C3A9>置(默认 23876ï¼?
å<EFBFBD>¯ç”¨ API 端点
状æ€<EFBFBD>查è¯?(GET)
| 端点 | 说明 | 用� |
|---|---|---|
/api/state/buildable |
当å‰<EFBFBD>科技解é”<EFBFBD>的建ç? | 查看 AI çŽ°åœ¨èƒ½é€ ä»€ä¹? |
/api/state/research |
ç§‘æŠ€æ ‘ï¼ˆè¿›åº¦/è§£é”<C3A9>的建ç‘) | ç§‘ç ”è§„åˆ’ |
/api/state/geysers |
喷泉(ä½<EFBFBD>ç½?状æ€?排放率) | 资æº<EFBFBD>规划 |
/api/state/alert |
è¦æŠ¥åˆ—è¡¨ | 紧急处ç<EFBFBD>? |
/api/state/critters |
å°<EFBFBD>动物(ä½<EFBFBD>ç½®/ç§<C3A7>ç±»/幸ç¦<C3A7>åº?年龄ï¼? | 养殖管ç<EFBFBD>† |
/api/state/plants |
æ¤<EFBFBD>物(ä½<EFBFBD>ç½?生长进度/是å<C2AF>¦æž¯è<C2AF>Žï¼? | 农业管ç<EFBFBD>† |
/api/state/rooms |
房间(类åž?æ ¼æ•°/å»ºç‘æ•°ï¼‰ | 房间判定 |
地图/æ ¼å<C3A5>æ•°æ<C2B0>® (GET)
| 端点 | 说明 | 示例 |
|---|---|---|
/api/state/cell?x=10&y=5 |
å<EFBFBD>•æ ¼è¯¦æƒ… | 查看æŸ<EFBFBD>ä¸ªæ ¼å<EFBFBD>是气ä½?液体/å»ºç‘ |
/api/state/cells?x=0&y=0&width=10&height=10 |
矩形区域 | 查看 10x10 区域 |
/api/state/cells/slice?axis=y&index=20&start=0&end=50 |
è¡?列扫æ<C2AB>? | 查看ç¬?20 è¡? |
/api/state/gas?x=10&y=10&radius=20 |
区域气体分æž<EFBFBD> | 查看周围气体æˆ<EFBFBD>分 |
实体注册è¡?(GET,AI å<>‚考用)
| 端点 | 说明 |
|---|---|
/api/registry/buildings |
所有建ç?ID å<>Šå°ºå¯?功è€?å<>‘çƒ |
/api/registry/elements |
所有元ç´?ID å<>Šæ¯”çƒå®¹/导çƒ/熔沸ç‚? |
/api/registry/techs |
所有科技 ID å<>Šå‰<C3A5>ç½?è§£é”<C3A9>内容 |
æ“<EFBFBD>作 (POST)
| 端点 | 请求� | 用� |
|---|---|---|
/api/action/toggle |
{x, y} |
开关建ç‘(çœ<EFBFBD>电/控制æµ<C3A6>程ï¼? |
/api/action/set_recipe |
{x, y, recipeId} |
设置建ç‘é…<EFBFBD>æ–¹ |
/api/action/empty |
{x, y} |
清空建ç‘储物 |
/api/action/cancel_errand |
{x, y} |
å<EFBFBD>–消建ç‘处的任务 |
/api/action/dig |
{x, y, width, height} |
挖掘区域 |
/api/action/build |
{buildingId, x, y} |
å»ºé€ å»ºç? |
/api/action/deconstruct |
{buildingId, x, y} |
æ‹†é™¤å»ºç‘ |
/api/action/prioritize |
{x, y, priority} |
设优先级 |
/api/action/research |
{techId} |
é€‰ç ”ç©¶é¡¹ç›? |
/api/action/mop |
{x, y} |
清ç<EFBFBD>†æ¶²ä½“ |
/api/action/harvest |
{x, y} |
收获æ¤<EFBFBD>物 |
AI 如何进行推ç<C2A8>†å’Œæ“<C3A6>ä½?
第一æ¥ï¼šèŽ·å<EFBFBD>–全局上下æ–?
python3 tools/oni_api.py status
python3 tools/oni_api.py buildings
python3 tools/oni_analyzer.py
第二æ¥ï¼šç<EFBFBD>†è§£åœ°å›¾
# 探索基地ä¸å¿ƒåŒºåŸŸï¼ˆå<CB86>‡è®¾åŸºåœ°åœ¨ 50,50ï¼?python3 tools/oni_api.py explore 40 40 40 30
# 检查æŸ<C3A6>ä¸ªæ ¼å<C3A5>的详细信æ<C2A1>¯
python3 tools/oni_api.py cell 45 48
# 查看气体分布
python3 tools/oni_api.py gas 50 50 30
第三æ¥ï¼šå<EFBFBD>‚考知识库
# 查找æŸ<C3A6>个建ç‘çš?ID
python3 tools/oni_api.py registry buildings Electrolyzer
# æŸ¥çœ‹å…ƒç´ å±žæ€?python3 tools/oni_api.py registry elements Water
# 查看科技æ ?python3 tools/oni_api.py registry techs
第四æ¥ï¼šæ‰§è¡Œæ“<EFBFBD>作
# å»ºé€ ç”µè§£å™¨
python3 tools/oni_api.py build Electrolyzer 45 48
# 挖掘空间
python3 tools/oni_api.py dig 40 45 8 6
# é€‰æ‹©ç§‘ç ”æ–¹å<C2B9>‘
python3 tools/oni_api.py research_select ImprovedOxygen
# 使用è“<C3A8>图
python3 tools/oni_builder.py build spom 42 42
AI 如何ç<E280A2>†è§£å¸¸è§<C3A8>游æˆ<C3A6>场景
场景 1:氧气ä¸<C3A4>è¶?
*AI 推ç<C2A8>†è¿‡ç¨‹ï¼?
- 检�
/api/state/resourcesä¸çš„ O2 å’?Algae å˜é‡<C3A9> - 检æŸ?
/api/state/buildings是å<C2AF>¦æœ‰ç”µè§£å™¨æˆ–氧气扩散器 - 检æŸ?
/api/state/cell?x=&y=查询基地气体分布 - 如果 Algae < 1t ä¸”æ— ç”µè§£å™?â†?建议建é€?SPOM
- SPOM 需è¦<C3A8>:水æº<C3A6> + 电解å™?+ 气体æ³?+ 氢气å<E2809D>‘电æœ?+ 气体过滤å™?6. 通过
explore找到一�8x6 的空�7. 执行build Electrolyzer x y+build GasPump ...+build HydrogenGenerator ...
场景 2:食物çŸç¼?
*AI 推ç<C2A8>†è¿‡ç¨‹ï¼?
- 检æŸ?Calories < 500,000 kcal â†?食物预è¦
- 检查是å<EFBFBD>¦æœ‰ PlanterBox/FarmTile å’?ElectricGrill
- 如果没有农场 �建议建�5 �PlanterBox �Mealwood
- Mealwood ä¸<C3A4>需è¦<C3A8>ç<EFBFBD>Œæº‰æˆ–施肥,å<C592>ªéœ€ Dirt
- 检æŸ?Dirt å˜é‡<C3A9>,如果足å¤?â†?执行建é€?6. 如果有污æ°?â†?建议建é€?Water Sieve + 厕所水循çŽ?
场景 3:温度过�
*AI 推ç<C2A8>†è¿‡ç¨‹ï¼?
- 检查温度数æ<EFBFBD>®ï¼ˆé€šè¿‡èµ„æº<EFBFBD>ä¸çš„ Temperature æˆ–æ ¼å<C3A5>æ•°æ<C2B0>®ï¼‰
- æŸ¥çœ‹çƒæº<EFBFBD>(煤å<EFBFBD>‘电机ã€<EFBFBD>精炼厂ç‰é<EFBFBD> 近基地的ä½<EFBFBD>ç½®ï¼?3. 建议:用隔çƒé—¨åŒ…å›´çƒæº?+ å»ºé€ æ¶²å†·æ¨¡å<C2A1>?4. 液冷模å<C2A1>—需è¦<C3A8>:Aquatuner + SteamTurbine + å¯¼çƒæ¶²ä½“管é<C2A1>“
æš‚å<EFBFBD>œä¸Žé€Ÿåº¦å<EFBFBD>‚è€?
游æˆ<EFBFBD>状æ€<EFBFBD>ä¸çš?isPaused å’?gameSpeed å—æ®µï¼?
isPaused: true â†?是å<C2AF>¦æš‚å<E2809A>œ
gameSpeed: 0 â†?0=æš‚å<E2809A>œ, 1=1x, 2=2x, 3=3x
æš‚å<EFBFBD>œè§„则已集æˆ<EFBFBD>在"统一æ“<C3A6>作å<C593><C3A5>è®®"çš„æ ‡å‡?SOP ä¸ï¼Œè¯¦è§<C3A8>ä¸‹èŠ‚ã€‚æ ¸å¿ƒåŽŸåˆ™ï¼š
- **所有写æ“<C3A6>作å‰<C3A5>必须暂å<E2809A>?*(dig/build/deconstruct/batch/pipe/wireï¼?- **å<>ªè¯»æŸ¥è¯¢ä¸<C3A4>需è¦<C3A8>æš‚å<E2809A>?*(status/resources/eventsï¼?- *æ“<EFBFBD>作完æˆ<EFBFBD>å<EFBFBD>Žå¿…é¡»æ<EFBFBD>¢å¤?
AI 统一æ“<C3A6>作å<C593><C3A5>è®®
这是 AI æ“<C3A6>ä½œç¼ºæ°§çš„æ ‡å‡†å<E280A0><C3A5>议。所有决ç–å’Œæ“<C3A6>作必须é<C2BB>µå¾ªæ¤å<C2A4><C3A5>è®®ã€?
é“<EFBFBD>律(必须é<EFBFBD>µå®ˆï¼‰
é“<EFBFBD>律 1: 任何时å€?AI 开始推ç<C2A8>?决ç–å‰?â†?必须先暂å<E2809A>œæ¸¸æˆ<C3A6>ã€? 工具在获å<C2B7>–游æˆ<C3A6>状æ€<C3A6>æ•°æ<C2B0>®æ—¶ä¼šè‡ªåŠ¨è§¦å<C2A6>‘æš‚å<E2809A>œï¼Œ
ä¿<C3A4>è¯<C3A8> AI 获å<C2B7>–的信æ<C2A1>¯æ˜¯å½“å‰<C3A5>时刻的准确快照ã€? â†?工具自动执行 pauseï¼ˆæ— éœ€æ‰‹åŠ¨è°ƒç”¨ï¼? â†?AI 完æˆ<C3A6>所有æ“<C3A6>作å<C593>Žä¸»åЍ unpause
é“<C3A9>律 2: 任何时å€?AI 需è¦<C3A8>å<EFBFBD>‘用户æ<C2B7><C3A6>问,必须先暂å<E2809A>œæ¸¸æˆ<C3A6>ã€? â†?工具自动暂å<E2809A>œï¼Œç”¨æˆ·å›žç”å<E2809D>Ž AI æ<>¢å¤<C3A5>æ—?unpause
é“<C3A9>律 3: 任何时å€?AI 结æ<E2809C>Ÿå›žç”/退出æ“<C3A6>作状æ€<C3A6>,必须确ä¿<C3A4>游æˆ<C3A6>处于暂å<E2809A>œæ€<C3A6>,
除é<C2A4>žç”¨æˆ·æ˜Žç¡®è¦<C3A8>求ä¸<C3A4>æš‚å<E2809A>œã€? â†?é˜²æ¢æ¸¸æˆ<C3A6>åœ?AI ä¸<C3A4>监控时状æ€<C3A6>æ<EFBFBD>¶åŒ–(窒æ<E28099>¯/过载/高温/CO₂)
é“<C3A9>律 4: 任何时å€?AI 执行写æ“<C3A6>作(dig/build/deconstruct/batch/pipe/wire),
工具自动确ä¿<C3A4>æš‚å<E2809A>œæ€<C3A6>ã€?
é“<C3A9>律 5: é‡<C3A9>大æ“<C3A6>作å‰<C3A5>必须先 save å˜æ¡£ï¼Œå¤±è´¥å<C2A5>Žå…<C3A5>许 load 回滚ã€?```
### æ ¸å¿ƒæ“<C3A6>作循环
æ¯<C3A6>次 AI 与游æˆ<C3A6>交互都必须é<C2BB>µå¾ªè¿™ä¸ªäº”æ¥å¾ªçޝï¼?
┌─────────────────────────────────────────────────────────â”?â”? 1. 上下文感çŸ? â”?â”? snapshot + diagnose + events â”?â”? "我现在看到什么?当å‰<C3A5>状æ€<C3A6>是什么?å<C5B8>‘生了什么?" â”?└──────────────────────┬──────────────────────────────────â”? â–?┌─────────────────────────────────────────────────────────â”?â”? 2. 决ç–与规åˆ? â”?â”? pause â†?分æž<C3A6>æ•°æ<C2B0>® â†?ç¡®å®šç›®æ ‡ â†?选择工具 â”?â”? "基于现状,我需è¦<C3A8>å<EFBFBD>šä»€ä¹ˆï¼Ÿç”¨ä»€ä¹ˆå·¥å…·ï¼Ÿåœ¨å“ªä¸ªå<C2AA><C3A5>æ ‡ï¼Ÿ" â”?└──────────────────────┬──────────────────────────────────â”? â–?┌─────────────────────────────────────────────────────────â”?â”? 3. 执行å‰<C3A5>ä¿<C3A4>æŠ? â”?â”? save â†?camera â†?cell â†?snapshot â”?â”? "å…ˆå˜æ¡£ï¼Œç„¶å<C2B6>ŽæŠŠè§†é‡Žç§»è¿‡åŽ»ï¼Œç¡®è®¤å<C2A4><C3A5>æ ‡æ£ç¡? â”?└──────────────────────┬──────────────────────────────────â”? â–?┌─────────────────────────────────────────────────────────â”?â”? 4. 执行æ“<C3A6>作 â”?â”? dig/build/build_pipe_line/batch â”?â”? æ¯<C3A6>ä¸€æ¥æ£€æŸ¥å<C2A5><C3A5>馈(success/fail + suggestionï¼? â”?└──────────────────────┬──────────────────────────────────â”? â–?┌─────────────────────────────────────────────────────────â”?â”? 5. 验è¯<C3A8>与æ<C5BD>¢å¤? â”?â”? unpause â†?snapshot â†?检查状æ€? â”?â”? æ<>¶åŒ– â†?load 回滚 â†?æ<>¢æ–¹æ¡? â”?└─────────────────────────────────────────────────────────â”?```
æ ‡å‡†æ“<EFBFBD>作 SOP
任何时å€?AI 执行æ“<C3A6>作,必须按以下æµ<C3A6>程ï¼?
æ¥éª¤ 0: æš‚å<E2809A>œ
python3 tools/oni_api.py pause "æ“<C3A6>作说明"
â†?确认 success=true,å<C592>¦åˆ™é‡<C3A9>è¯?
æ¥éª¤ 1: 视觉确认
python3 tools/oni_api.py camera <x> <y> <zoom>
python3 tools/oni_api.py snapshot
â†?ä¸‹è½½æˆªå›¾ï¼Œç¡®è®¤ç›®æ ‡ä½<C3A4>ç½®æ£ç¡?
æ¥éª¤ 2: æ•°æ<C2B0>®ç¡®è®¤
python3 tools/oni_api.py cell <x> <y>
â†?hasBuilding=true â†?å…?deconstruct 或æ<E28093>¢ä½<C3A4>ç½®
�isSolid=true ��dig
â†?isVacuum=true â†?确认原å›
æ¥éª¤ 3: å®‰å…¨å˜æ¡£
python3 tools/oni_api.py save "before_任务å<C2A1>?
�确认 success=true
æ¥éª¤ 4: 执行
dig / build / build_pipe_line / build_wire_line / batch
â†?æ¯<C3A6>次检查å<C2A5><C3A5>馈:
success=true â†?ç»§ç»
success=false â†?è¯?suggestion â†?调整é‡<C3A9>试 â†?3次失败则 load 回滚
æ¥éª¤ 5: 验è¯<C3A8>
snapshot �截图对比
resources â†?资æº<C3A6>å<EFBFBD>˜åŒ–
未改��load 回滚
æ¥éª¤ 6: æ<>¢å¤<C3A5>
unpause 1
å†³ç–æ¡†æž¶
AI é<>¢å¯¹ä»»ä½•é—®é¢˜æŒ‰æ¤æ¡†æž¶æ€<C3A6>考:
ã€<EFBFBD>æ•°æ<EFBFBD>®æ”¶é›†ã€? status â†?diagnose â†?power â†?co2 â†?temp_zones â†?resources â†?buildings
ã€<C3A3>定ä½<C3A4>分æž<C3A6>ã€? cells <x> <y> <w> <h> â†?cell <x> <y> â†?camera + snapshot
ã€<C3A3>方案选择ã€? ç´§æ€?â†?emergency_o2 / fix_co2 / fix_overload
建é€?â†?定å<C5A1><C3A5>æ ?â†?build / build_pipe_line / build_wire_line
批é‡<C3A9> â†?batch JSON
扩展 �expand_base
检��diagnose
回滚 �load
æ ‡å‡†æ–¹æ¡ˆæ‰‹å†Œ
方案 A:åˆ<C3A5>期基地(Cycle 1-20ï¼?
1. pause "Initial base"
2. diagnose
3. expand_base <ä¸å¿ƒ> <å®? <é«?
4. build ResearchStation <å<><C3A5>æ ‡>
5. build ManualGenerator <å<><C3A5>æ ‡>
6. build Battery <å<><C3A5>æ ‡>
7. build OxygenDiffuser <å<><C3A5>æ ‡>
8. build PlanterBox x5
9. build Cot x3 / LadderBed x3
10. build Outhouse + WashBasin
11. research_select FarmingTech
12. research_select PowerRegulation
13. unpause 1
方案 B:CO2 å<>±æœº
症状:duplicants 窒æ<E28099>¯ï¼Œco2 显示大é‡<C3A9> CO2
1. pause "CO2"
2. co2 â†?找到最å¤?CO2 è<>šé›†ç‚?3. camera <x> <最ä½?y> 20
4. snapshot �确认地形
5. save "before_co2"
6. fix_co2 �自动挖排气管
7. snapshot �确认挖�8. unpause 1
9. 30s å<>?co2 确认下é™<C3A9>
方案 C:电力过�
症状:power 显示 *** OVERLOAD ***
1. pause "Power overload"
2. power �哪个电路过载
3. diagnose â†?资æº<C3A6>检æŸ?4. save "before_power"
5. fix_overload â†?ä¿®å¤<C3A5>建议
6. 如电力ä¸<C3A4>è¶?â†?build <å<>‘电æœ? â†?build_wire_line <连接>
7. power �确认过载消失
8. unpause 1
方案 D:氧气å<E2809D>±æœ?
症状:duplicants 显示 oxygen<20%
1. pause "O2"
2. snapshot �视觉确认
3. resources â†?O2/Algae å˜é‡<C3A9>
4. buildings �电解�扩散�5. save "before_o2"
6. 分支ï¼? æ— è®¾å¤?â†?build OxygenDiffuser
æ— è—»ç±?â†?build Electrolyzer + 接水管电çº? 设备ä¸<C3A4>å·¥ä½?â†?cell 检查供水和供电
7. unpause 1
8. 30s å<>?resources â†?O2 回å<C5BE>‡ï¼?```
#### 方案 E:建�SPOM
- pause "SPOM"
- explore �8x6 空地
- camera �snapshot 确认
- save "before_spom"
- oni_builder.py build spom
- build_pipe_line liquid <æ°´æº<C3A6>> <电解å™?
- build_wire_line heavy <å<>‘电æœ? <ç”µæ± > cross
- unpause 1
#### 方案 F:管é<C2A1>“铺设(带交å<C2A4>‰å¤„ç<E2809E>†ï¼‰
需求:液体管é<EFBFBD>“横穿已有气体管é<EFBFBD>“
- pause "Plumbing"
- camera <起点> <终点> 25
- save "before_pipe"
- 横穿段用 cross 模å¼<C3A5>ï¼? build_pipe_line liquid <起点> <终点> cross â†?Mod 自动在交å<C2A4>‰å¤„放跨接器
- pipes liquid â†?确认æµ<C3A6>动
- unpause 1
#### 方案 G:电线布�
éœ€æ±‚ï¼šä¸ºæ–°å»ºç‘æ‹‰ç”µçº¿åˆ°ç”µç½‘
- pause "Wiring"
- camera <建ç‘> <电æº<C3A6>> 25
- power �查空余容�4. save "before_wire"
- 布线(横穿用 cross): build_wire_line regular <建ç‘> <å<>˜åŽ‹å™? cross
- unpause 1
### 错误æ<C2AF>¢å¤<C3A5>
æ“<EFBFBD>作失败 â†?AI 必须读å<C2BB>– error + errorMessage + suggestion
错误处ç<EFBFBD>†è¡¨ï¼š cell_occupied â†?æ<>¢å<C2A2><C3A5>æ ‡æˆ– deconstruct cell_solid â†?å…?dig cell_occupied_by_dupeâ†?ç‰å¾… material_shortage â†?查资æº?+ 安排生产 unknown_building â†?registry buildings 查询 unknown_tech â†?registry techs 查询 missing_prerequisitesâ†?å…ˆç ”ç©¶å‰<C3A5>置科技 invalid_priority â†?ç”?1-9 save_not_found â†?saves 列出
é‡<EFBFBD>试 3 次失è´?â†?load 回滚
### å<><C3A5>æ ‡å®šä½<C3A4>方法
方法 1: 基于已有建ç‘å<E28098><C3A5>ç§» buildings â†?查已有建ç‘å<E28098><C3A5>æ ?â†?å<><C3A5>移放置
方法 2: 基于区域探索 explore â†?找空åœ? 方法 3: 基于资æº<C3A6>ä½<C3A4>ç½® co2 â†?CO2 è<>šé›†ç‚¹ä¸‹æ–¹æŒ–排气é<E2809D>? 方法 4: 基于 cell 验è¯<C3A8> cell â†?确认 isSolid=false + hasBuilding=false + isVisible=true
AI ä¹ æƒ¯ï¼šå¤´è„‘è§„åˆ’å<E28099><C3A5>æ ?â†?cell 验è¯<C3A8> â†?ç¡®è®¤æ— è¯¯å†<C3A5>建é€?```
事件自动å“<EFBFBD>应
event_daemon è¿<C3A8>行æ—?AI 自动å“<C3A5>应规则ï¼?
[CRITICAL] 窒æ<E28099>¯
�diagnose �执行方案 D 或方�B
[CRITICAL] ç”µåŠ›ä¸æ–
�power �执行方案 C
[WARNING] 食物çŸç¼º
�Calories<200k ��PlanterBox x5
[WARNING] 温度过高
â†?temp_zones â†?éš”çƒé—?+ 冷å<C2B7>´
[INFO] 新周æœ? â†?research â†?ç»§ç»ç§‘ç ”
�resources �安排生产
AI ä¸<C3A4>应ç‰å¾…指令——事件本身就是指令ã€?```
---
## AI 如何表达"åœ¨å“ªä¸ªæ ¼å<C3A5>å<EFBFBD>šä»€ä¹?
### 定ä½<C3A4>è¯æ³•
AI 在æ<C2A8><C3A6>è¿°æ“<C3A6>ä½œæ—¶åº”ä½¿ç”¨ä»¥ä¸‹æ ¼å¼<C3A5>:
在å<EFBFBD><EFBFBD>æ ?(x, y) 建é€? 在区åŸ?(x, y, width, height) 进行挖掘 ä»?(x1,y1) åˆ?(x2,y2) 铺设管é<C2A1>“/电线 åœ¨æ ¼å?(x, y) 设置优先级为
### å<><C3A5>æ ‡æŸ¥æ‰¾ç–ç•¥
å½?AI ä¸<C3A4>ç¡®å®šåœ¨å“ªé‡Œå»ºé€ æ—¶ï¼?1. 先用 `explore` 找一个空闲区域(没有建ç‘和固体阻挡)
2. æ£€æŸ¥ç©ºé—²åŒºåŸŸçš„å…ƒç´ å’Œæ¸©åº¦æ˜¯å<C2AF>¦é€‚å<E2809A>ˆ
3. ç”?`cell` å‘½ä»¤ç¡®è®¤ç›®æ ‡æ ¼å<C3A5>状æ€?4. ç„¶å<C2B6>Žç”?`dig` 清ç<E280A6>†ç©ºé—´
5. 最å<E282AC>Žç”¨ `build` 建é€?
### å»ºç‘æ”¾ç½®è§„则
- 建ç‘å<E28098><C3A5>æ ‡æ˜¯å…¶**左下è§?*çš„ä½<C3A4>ç½?- 建ç‘å<E28098> 用çš?w×h 区域必须全部是空åœ?- 需è¦<C3A8>ç¡®è®¤ç›®æ ‡åŒºåŸŸæ— å»ºç‘ã€<C3A3>æ— å›ºä½“è‡ªç„¶æ–¹å<C2B9>—
- 气体/液体ä¸<C3A4>会阻挡建ç‘
- 如果建ç‘需è¦<C3A8>特定环境(如电解器需è¦<C3A8>水),AI 需è¦<C3A8>先检查环å¢?
---
## 工具列表
| 工具 | 用�|
|------|------|
| `tools/oni_api.py` | Mod API 客户端(状æ€?æ ¼å<C3A5>/注册è¡?æ“<C3A6>作/批é‡<C3A9>/优先çº?事件ï¼?|
| `tools/oni_analyzer.py` | 自动分æž<C3A6>游æˆ<C3A6>状æ€<C3A6>ã€<C3A3>生æˆ<C3A6>预è¦å’Œå»ºè®® |
| `tools/oni_builder.py` | 预置è“<C3A8>å›¾å»ºé€ ï¼ˆSPOM/农场/养殖ç‰ï¼‰ |
| `scripts/auto_repair.sh` | è¯Šæ– Mod 连接问题 |
| `scripts/auto_analyze.sh` | 一键å<C2AE>¥åº·æ£€æŸ?状æ€?分æž<C3A6> |
| `scripts/watch.sh [ç§’]` | 循环监控模å¼<C3A5> |
| `scripts/setup.sh` | 环境åˆ<C3A5>始化与检æŸ?|
| `scripts/event_daemon.py` | **事件守护进程** â€?æŒ<C3A6>ç»è½®è¯¢äº‹ä»¶ â†?AI 输入æµ?|
| `docs/AI_KNOWLEDGE_BASE.md` | 建ç‘/å…ƒç´ /科技 ID 注册表和游æˆ<C3A6>机制å<C2B6>‚è€?|
| `docs/batch_example.json` | 批é‡<C3A9>任务示例文件 |
---
## æ ¸å¿ƒæ¸¸æˆ<C3A6>知识
### 生å˜ä¼˜å…ˆçº?1. **æ°§æ°”** â€?电解å™?> 藻类制氧(å‰<C3A5>期过渡)
2. **食物** â€?浆果 > 烤肉 > è<>¥å…»è†?3. **温度控制** â€?液冷 + 蒸汽æœ?4. **电力** â€?氢气å<E2809D>‘电 > ç…¤ç‚ > 手动
5. **水资æº<C3A6>管ç<C2A1>?* â€?净水器ã€<C3A3>污水过æ»?
### 常用布局
- SPOM: 电解制氧 + 氢气å<E2809D>‘电é—环
- å<>«ç”Ÿé—´æ°´å¾ªçޝ: å<>«ç”Ÿé—?â†?净水器 â†?å<>«ç”Ÿé—?- 冷å<C2B7>´ç³»ç»Ÿ: 液冷 + 蒸汽æœ?+ 导çƒç®?- Ranch 模å<C2A1>—: 养殖哈奇/滑鳞/飞鱼
### 关键事件预è¦
- æ°§æ°”ä¸<C3A4>è¶³ (< 500g/tile) â†?å¢žåŠ åˆ¶æ°§
- æ¸©åº¦è¶…æ ‡ (> 40°C æˆ?< -10°C) â†?å¢žåŠ æ¸©æŽ§
- 食物çŸç¼º (< 5 周期余é‡<C3A9>) â†?扩大ç§<C3A7>æ¤<C3A6>/养殖
- 电力ä¸<C3A4>è¶³ â†?å¢žåŠ å<C2A0>‘电或å‡<C3A5>å°‘è´Ÿè½?- 污水满溢 â†?å¢žåŠ å‡€æ°?扩大å˜å‚¨