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

490 lines
19 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Oxygen Not Included (ONI) Agent
## è<>Œè´£
å<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>状æ€?
æ¯<EFBFBD>格的数æ<EFBFBD>®ç»“æž„å¦ä¸ï¼ˆé€šè¿‡ `/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>行)
- 该区域的å¤<C3A5>制人列表(带åŽåŠ?当å‰<C3A5>任务ï¼?- 元素分布统计
- 感兴趣的关键格å­<C3A5>
---
## 通信æ¹å¼<C3A5>
- Mod 在游æˆ<C3A6>内å<E280A6>¯åЍ HTTP æœ<C3A6>务,暴éœ?RESTful API
- 通过 `http://127.0.0.1:PORT` 与游æˆ<C3A6>通信
- 端å<C2AF>£åœ?`config.json` 中é…<C3A9>置(默认 23876ï¼?
---
## å<>¯ç”¨ API 端点
### 状æ€<C3A6>查è¯?(GET)
| 端点 | 说明 | 用�|
|------|------|------|
| `/api/state/buildable` | 当å‰<C3A5>ç§æŠ€è§£é”<C3A9>的建ç­?| 查看 AI 现在能造什ä¹?|
| `/api/state/research` | 科技树(进度/è§£é”<C3A9>的建ç­ï¼‰ | 科研规划 |
| `/api/state/geysers` | å·æ³‰ï¼ˆä½<C3A4>ç½?状æ€?排放率) | 资æº<C3A6>è§„åˆ |
| `/api/state/alert` | 警报列表 | 紧急处ç<E2809E>?|
| `/api/state/critters` | å°<C3A5>动物(ä½<C3A4>ç½®/ç§<C3A7>ç±»/幸ç¦<C3A7>åº?年龄ï¼?| å…»æ®ç®¡ç<C2A1>† |
| `/api/state/plants` | æ¤<C3A6>物(ä½<C3A4>ç½?生长进度/是å<C2AF>¦æž¯è<C2AF>Žï¼?| 农业管ç<C2A1>† |
| `/api/state/rooms` | 房间(类�格数/建筑数) | 房间判定 |
### 地图/æ ¼å­<C3A5>æ•°æ<C2B0>® (GET)
| 端点 | 说明 | 示例 |
|------|------|------|
| `/api/state/cell?x=10&y=5` | å<>•格详情 | æŸ¥çœæŸ<C3A6>个格å­<C3A5>是气ä½?液体/建筑 |
| `/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` | 区域气体分æž<C3A6> | 查çœå¨å´æ°”体æˆ<C3A6>分 |
### 实体注册è¡?(GET,AI å<>考用)
| 端点 | 说明 |
|------|------|
| `/api/registry/buildings` | 所有建ç­?ID å<>Šå°ºå¯?功è€?å<>热 |
| `/api/registry/elements` | 所有元ç´?ID å<>Šæ¯”热容/导热/熔沸ç‚?|
| `/api/registry/techs` | 所有科技 ID å<>Šå‰<C3A5>ç½?è§£é”<C3A9>内容 |
### æ“<C3A6>作 (POST)
| 端点 | 请求�| 用�|
|------|--------|------|
| `/api/action/toggle` | `{x, y}` | 开关建ç­ï¼ˆçœ<C3A7>电/控制æµ<C3A6>ç¨ï¼?|
| `/api/action/set_recipe` | `{x, y, recipeId}` | 设置建ç­é…<C3A9>æ¹ |
| `/api/action/empty` | `{x, y}` | 清空建筑储物 |
| `/api/action/cancel_errand` | `{x, y}` | å<>消建ç­å¤„的任务 |
| `/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}` | 清ç<E280A6>†æ¶²ä½“ |
| `/api/action/harvest` | `{x, y}` | 收获æ¤<C3A6>物 |
---
## AI å¦ä½•è¿è¡ŒæŽ¨ç<C2A8>†åŒæ“<C3A6>ä½?
### 第一步:获å<C2B7>å…¨å±€ä¸Šä¸æ?
```bash
python3 tools/oni_api.py status
python3 tools/oni_api.py buildings
python3 tools/oni_analyzer.py
```
### 第二步:ç<C5A1>†è§£åœ°å¾
```bash
# 探索基地中心区域(å<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
```
### 第三步:å<C5A1>考知识库
```bash
# 查找æŸ<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
```
### ç¬¬åæ­¥ï¼šæ‰§è¡Œæ“<C3A6>作
```bash
# 建造电解器
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 éœè¦<EFBFBD>:水æº<EFBFBD> + çµè§£å™?+ 气体æ³?+ 氢气å<EFBFBD>çµæœ?+ 气体过滤å™?6. éšè¿‡ `explore` 找到一ä¸?8x6 çšç©ºåœ?7. 执行 `build Electrolyzer x y` + `build GasPump ...` + `build HydrogenGenerator ...`
### 场景 2:食物短�
**AI 推ç<EFBFBD>过程ï¼?*
1. 检�Calories < 500,000 kcal �食物预警
2. 检查是å<EFBFBD>¦æœ PlanterBox/FarmTile å?ElectricGrill
3. 如果没æœåœåœº â†?建议建é€?5 ä¸?PlanterBox ç§?Mealwood
4. Mealwood ä¸<EFBFBD>éœè¦<EFBFBD>ç<EFBFBD>Œæºæˆæ–½è‚¥ï¼Œå<EFBFBD>ªéœ Dirt
5. 检æŸ?Dirt å­˜é<EFBFBD>,如果足å¤?â†?执行建é€?6. å¦‚æžœæœæ±¡æ°?â†?建议建é€?Water Sieve + åŽæ‰€æ°´å¾ªçŽ?
### 场景 3:温度过�
**AI 推ç<EFBFBD>过程ï¼?*
1. 检查温度数æ<EFBFBD>®ï¼ˆéšè¿‡èµæº<EFBFBD>ä¸­çš Temperature æˆæ ¼å­<EFBFBD>æ•°æ<EFBFBD>®ï¼‰
2. 查çœçƒ­æº<EFBFBD>(煤å<EFBFBD>çµæœºã<EFBFBD>精炼åŽç­‰é<EFBFBD> è¿‘基地çšä½<EFBFBD>ç½®ï¼?3. 建议:用éšçƒ­é—¨åŒå´çƒ­æº?+ å»ºé æ¶²å†·æ¨¡å<EFBFBD>?4. 液冷模å<EFBFBD>éœè¦<EFBFBD>:Aquatuner + SteamTurbine + 导热液体管é<EFBFBD>
---
## æšå<E2809A>œä¸Žé€Ÿåº¦å<C2A6>è€?
游æˆ<EFBFBD>çŠæ<EFBFBD>中çš?`isPaused` å?`gameSpeed` 字段ï¼?
```
isPaused: true â†?是å<C2AF>¦æšå<E2809A>œ
gameSpeed: 0 â†?0=æšå<E2809A>œ, 1=1x, 2=2x, 3=3x
```
æšå<EFBFBD>œè§„åˆå·²é›†æˆ<EFBFBD>在"统一æ<EFBFBD>作å<EFBFBD><EFBFBD>è®®"çšæ å‡?SOP 中,详è§<EFBFBD>ä¸èŠã€‚核心原åˆï¼š
- **所æœå†™æ<EFBFBD>作å<EFBFBD>å¿…é¡»æšå<EFBFBD>?*(dig/build/deconstruct/batch/pipe/wireï¼?- **å<EFBFBD>ªè¯»æŸ¥è¯¢ä¸<EFBFBD>éœè¦<EFBFBD>æšå<EFBFBD>?*(status/resources/eventsï¼?- **æ<EFBFBD>作完æˆ<EFBFBD>å<EFBFBD>Žå¿…é¡»æ<EFBFBD>¢å¤?*
---
---
## AI 统一æ“<C3A6>作å<C593><C3A5>è®®
这是 AI æ<EFBFBD>ä½œç¼ºæ°§çšæ å‡†å<EFBFBD><EFBFBD>议。所æœå†³ç­åŒæ<EFBFBD>作必须é<EFBFBD>µå¾ªæ­¤å<EFBFBD><EFBFBD>è®®ã€?
### é“<C3A9>å¾ï¼ˆå¿…é¡»é<C2BB>µå®ˆï¼‰
```
é“<EFBFBD>å¾ 1: 任何时å€?AI 开姿ލç<C2A8>?决策å‰?â†?必须先æšå<E2809A>œæ¸¸æˆ<C3A6>ã€? 工具在获å<C2B7>游æˆ<C3A6>状æ€<C3A6>æ•°æ<C2B0>®æ—¶ä¼šè‡ªåŠ¨è§¦å<C2A6>æšå<E2809A>œï¼Œ
ä¿<C3A4>è¯<C3A8> AI 获å<C2B7>的信æ<C2A1>¯æ˜¯å½“å‰<C3A5>时刻的准确快照ã€? â†?工具自动执行 pause(无需æ‰åŠ¨è°ƒç”¨ï¼? â†?AI 完æˆ<C3A6>所有æ“<C3A6>作å<C593>Žä¸»åЍ unpause
é“<EFBFBD>å¾ 2: 任何时å€?AI 需è¦<C3A8>å<EFBFBD>用户æ<C2B7><C3A6>问,必须先æšå<E2809A>œæ¸¸æˆ<C3A6>ã€? â†?工具自动æšå<E2809A>œï¼Œç”¨æˆ·åžç­”å<E2809D>Ž AI æ<>¢å¤<C3A5>æ—?unpause
é“<EFBFBD>å¾ 3: 任何时å€?AI 结æ<E2809C>Ÿåžç­”/退出æ“<C3A6>作状æ€<C3A6>,必须确ä¿<C3A4>游æˆ<C3A6>处于æšå<E2809A>œæ€<C3A6>,
除é<C2A4>žç”¨æˆ·æ˜Žç¡®è¦<C3A8>æ±ä¸<C3A4>æšå<E2809A>œã€? â†?防止游æˆ<C3A6>åœ?AI ä¸<C3A4>çæŽ§æ—¶çжæ€<C3A6>æ<EFBFBD>¶åŒï¼ˆçªæ<E28099>¯/过载/高温/COâ)
é“<EFBFBD>å¾ 4: 任何时å€?AI 执行写æ“<C3A6>作(dig/build/deconstruct/batch/pipe/wire),
工具自动确ä¿<C3A4>æšå<E2809A>œæ€<C3A6>ã€?
é“<EFBFBD>å¾ 5: é‡<C3A9>大æ“<C3A6>作å‰<C3A5>必须先 save 存档,失败å<C2A5>Žå…<C3A5>许 load 回滚ã€?```
### 核心æ“<C3A6>作循环
æ¯<EFBFBD>次 AI 与游æˆ<C3A6>交äºéƒ½å¿…é¡»é<C2BB>µå¾ªè¿™ä¸ªäº”步循环ï¼?
```
âŒâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”?â”? 1. ä¸Šä¸æ–‡æŸçŸ? â”?â”? snapshot + diagnose + events â”?â”? "æˆçŽ°åœ¨çœåˆ°ä»€ä¹ˆï¼Ÿå½“å<EFBFBD>çŠæ<EFBFBD>是什么?å<EFBFBD>çŸäºä»€ä¹ˆï¼Ÿ" â”?└──────────────────────┬──────────────────────────────────â”? â?âŒâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”?â”? 2. 决ç­ä¸Žè§„åˆ? â”?â”? pause â†?åˆæž<EFBFBD>æ•°æ<EFBFBD>® â†?ç¡®å®šç›®æ  â†?选择工具 â”?â”? "基于现çŠï¼Œæˆéœè¦<EFBFBD>å<EFBFBD>šä»€ä¹ˆï¼Ÿç”¨ä»€ä¹ˆå·¥å…·ï¼Ÿåœ¨åªä¸ªå<EFBFBD><EFBFBD>æ ï¼Ÿ" â”?└──────────────────────┬──────────────────────────────────â”? â?âŒâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”?â”? 3. 执行å<EFBFBD>ä¿<EFBFBD>æŠ? â”?â”? save â†?camera â†?cell â†?snapshot â”?â”? "åˆå­˜æ¡£ï¼Œç„¶å<EFBFBD>ŽæŠŠè§†éŽç§»è¿‡åŽ»ï¼Œç¡®è®¤å<EFBFBD><EFBFBD>æ æ­£ç¡? â”?└──────────────────────┬──────────────────────────────────â”? â?âŒâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”?â”? 4. 执行æ<EFBFBD>作 â”?â”? dig/build/build_pipe_line/batch â”?â”? æ¯<EFBFBD>一步检查å<EFBFBD><EFBFBD>馈(success/fail + suggestionï¼? â”?└──────────────────────┬──────────────────────────────────â”? â?âŒâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”?â”? 5. 验è¯<EFBFBD>与æ<EFBFBD>¢å¤? â”?â”? unpause â†?snapshot â†?æ£€æŸ¥çŠæ€? â”?â”? æ<EFBFBD>åŒ â†?load åžæ»š â†?æ<EFBFBD>¢æ–¹æ¡? â”?└─────────────────────────────────────────────────────────â”?```
### 标准æ“<C3A6>作 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
ã€<EFBFBD>定ä½<EFBFBD>分æž<EFBFBD>ã€? cells <x> <y> <w> <h> â†?cell <x> <y> â†?camera + snapshot
ã€<EFBFBD>æ¹æ¡ˆé€‰æ©ã€? ç´§æ€?â†?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 <x> <y>
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"
5. 布线(横穿用 cross):
build_wire_line regular <建筑> <å<>˜åŽå™? cross
6. 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 <x> <y> <w> <h> �找空�
方法 3: 基于资æº<C3A6>ä½<C3A4>ç½®
co2 â†?CO2 è<>šé†ç¹ä¸æ¹æŒæŽæ°”é<E2809D>?
方法 4: 基于 cell 验è¯<C3A8>
cell <x> <y> �确认 isSolid=false + hasBuilding=false + isVisible=true
AI 习惯:头è„è§„åˆå<E28099><C3A5>æ ?â†?cell 验è¯<C3A8> â†?确认无误å†<C3A5>建é€?```
### äºä»¶è‡ªåЍå“<C3A5>应
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) 建é€?<buildingId>
在区�(x, y, width, height) 进行挖掘
ä»?(x1,y1) åˆ?(x2,y2) 铺设管é<C2A1>“/电线
在格�(x, y) 设置优先级为 <priority>
```
### å<><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` | 批é<EFBFBD>任务示例文件 |
---
## 核心游æˆ<C3A6>知识
### 生存优先çº?1. **æ°§æ°”** â€?电解å™?> 藻类制氧(å‰<C3A5>期过渡)
2. **食物** â€?æµæžœ > 烤肉 > è<>¥å…»è†?3. **温度控制** â€?液冷 + 蒸汽æœ?4. **电力** â€?氢气å<E2809D>电 > 煤炭 > 手动
5. **水资æº<C3A6>管ç<C2A1>?* â€?净水器ã€<C3A3>污水过æ»?
### 常用布局
- SPOM: 电解制氧 + 氢气å<E2809D>电闭环
- å<>«ç”Ÿé—´æ°´å¾ªçޝ: å<>«ç”Ÿé—?â†?净水器 â†?å<>«ç”Ÿé—?- 冷å<C2B7>´ç³»ç»Ÿ: 液冷 + 蒸汽æœ?+ 导热ç®?- Ranch 模å<C2A1>—: 养殖哈奇/滑鳞/飞鱼
### 关键事件预警
- æ°§æ°”ä¸<C3A4>è¶³ (< 500g/tile) â†?å¢žåŠ åˆæ°§
- æ¸©åº¦è¶…æ  (> 40°C æˆ?< -10°C) â†?增加温控
- 食物短缺 (< 5 周期余é<EFBFBD>) â†?扩大ç§<EFBFBD>æ¤<EFBFBD>/养殖
- çµåŠä¸<EFBFBD>è¶³ â†?增加å<EFBFBD>çµæˆå<EFBFBD>å°‘è´Ÿè½?- 污水满溢 â†?增加净æ°?扩大存储