Files
oniagent/SKILL.md
2026-05-30 11:00:36 +08:00

19 KiB
Raw Blame History

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>†è¿‡ç¨ï¼?

  1. 检æŸ?/api/state/resources 中的 O2 å’?Algae å­˜é‡<C3A9>
  2. 检æŸ?/api/state/buildings 是å<C2AF>¦æœ‰ç”µè§£å™¨æˆæ°§æ°”扩散器
  3. 检�/api/state/cell?x=&y= 查询基地气体分布
  4. 如果 Algae < 1t 且无电解��建议建�SPOM
  5. SPOM 需è¦<C3A8>:水æº<C3A6> + 电解å™?+ 气体æ³?+ 氢气å<E2809D>电æœ?+ 气体过滤å™?6. 通过 explore 找到一ä¸?8x6 的空åœ?7. 执行 build Electrolyzer x y + build GasPump ... + build HydrogenGenerator ...

场景 2:食物短�

*AI 推ç<C2A8>†è¿‡ç¨ï¼?

  1. 检�Calories < 500,000 kcal �食物预警
  2. 检查是å<EFBFBD>¦æœ‰ PlanterBox/FarmTile å’?ElectricGrill
  3. 如果没有农场 �建议建�5 �PlanterBox �Mealwood
  4. Mealwood ä¸<C3A4>需è¦<C3A8>ç<EFBFBD>Œæº‰æˆæ½è¥ï¼Œå<C592>ªéœ€ Dirt
  5. 检æŸ?Dirt å­˜é‡<C3A9>ï¼Œå¦æžœè¶³å¤?â†?执行建é€?6. 如果有污æ°?â†?建议建é€?Water Sieve + 厕所水循çŽ?

场景 3:温度过�

*AI 推ç<C2A8>†è¿‡ç¨ï¼?

  1. 检查温度数æ<EFBFBD>®ï¼ˆé€šè¿‡èµ„æº<EFBFBD>中的 Temperature æˆæ ¼å­<C3A5>æ•°æ<C2B0>®ï¼‰
  2. 查çœçƒ­æº<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

  1. pause "SPOM"
  2. explore �8x6 空地
  3. camera �snapshot 确认
  4. save "before_spom"
  5. oni_builder.py build spom
  6. build_pipe_line liquid <æ°´æº<C3A6>> <电解å™?
  7. build_wire_line heavy <å<>电æœ? <电池> cross
  8. unpause 1

#### 方案 F:管é<C2A1>“铺设(带交å<C2A4>‰å¤„ç<E2809E>†ï¼‰

需æ±ï¼šæ¶²ä½“管é<EFBFBD>“横穿已有气体管é<EFBFBD>

  1. pause "Plumbing"
  2. camera <起点> <终点> 25
  3. save "before_pipe"
  4. 横穿段用 cross 模å¼<C3A5>ï¼? build_pipe_line liquid <起点> <终点> cross â†?Mod 自动在交å<C2A4>‰å¤„放跨接器
  5. pipes liquid â†?确认æµ<C3A6>动
  6. unpause 1

#### 方案 G:电线布�

需求:为新建筑拉电线到电网

  1. pause "Wiring"
  2. camera <建筑> <电æº<C3A6>> 25
  3. power �查空余容�4. save "before_wire"
  4. 布线(横穿用 cross): build_wire_line regular <建筑> <å<>˜åŽå™? cross
  5. 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>å°è´Ÿè½?- 污水满溢 â†?增加净æ°?扩大存储