37127f7f4fcf494869ed18b4839a61204eadb118
- explore 메서드에 wanted_ores 매개변수를 추가하여 특정 자원을 찾을 수 있도록 개선 - 원하는 자원이 발견될 때까지 계속 이동하며, 다른 자원이 발견되더라도 즉시 멈추지 않도록 로직 수정 - 시스템 프롬프트 및 README.md에 변경 사항 반영
팩토리오 AI 에이전트 (순수 플레이)
AI가 팩토리오를 치트 없이 자율적으로 플레이하는 에이전트입니다. 실제 걷기, 실제 채굴, 실제 제작, 건설 거리 제한 등 모든 게임 메커닉을 준수합니다.
순수 플레이 모드란?
| 항목 | 치트 모드 | 순수 모드 (현재) |
|---|---|---|
| 이동 | 텔레포트 | 실제 걷기 (walking_state) |
| 채굴 | 인벤토리 직접 삽입 | 자원 패치에서 실제 채굴 (mining_state) |
| 제작 | 무조건 지급 | 재료 소모 실제 제작 (begin_crafting) |
| 건설 | 어디서든 create_entity | 건설 거리 내에서 build_from_cursor |
| 삽입 | 무한 아이템 | 플레이어 인벤토리에서 차감 |
파일 구조
factorio_ai/
├── main.py ← 메인 루프 (여기서 실행)
├── factorio_rcon.py ← RCON 연결 (게임과 통신)
├── state_reader.py ← 게임 상태 읽기 (자원, 인벤토리, 건물)
├── context_compressor.py ← 중반 이후 상태 압축
├── ai_planner.py ← AI 행동 계획 (순수 플레이 제약 반영)
├── action_executor.py ← 실제 게임 조작 (순수 메커닉)
└── agent_log.jsonl ← 행동 로그 (자동 생성)
설치
# 외부 라이브러리 불필요! Python 표준 라이브러리만 사용
팩토리오 RCON 설정
방법 1: 싱글플레이
- 팩토리오 실행
- 게임 시작 후 콘솔 열기 (` 키 또는 ~)
- 아래 입력:
/rcon-port 25575 /rcon-password factorio_ai
방법 2: 서버 모드 (권장)
# Windows
factorio.exe --start-server saves/mysave.zip --rcon-port 25575 --rcon-password factorio_ai
# Linux/Mac
./factorio --start-server saves/mysave.zip --rcon-port 25575 --rcon-password factorio_ai
실행
# Z.ai API 키 설정
export ZAI_API_KEY="your-key-here"
# 기본 실행
python main.py
# 커스텀 서버
FACTORIO_HOST=192.168.1.10 FACTORIO_PORT=25575 FACTORIO_PASSWORD=mypass python main.py
동작 원리
1. RCON → 팩토리오에서 현재 상태 읽기
(플레이어 위치, 인벤토리, 자원 패치, 건물 목록)
2. 상태 → AI API로 전송
"다음에 뭘 해야 하나요?" (순수 플레이 제약 포함)
3. AI → JSON 행동 시퀀스 반환
[move → mine_resource → craft_item → place_entity ...]
4. RCON → 팩토리오에서 실제 게임 메커닉으로 실행
- 캐릭터가 실제로 걸어감
- 실제로 곡괭이질해서 채굴
- 재료를 소모해서 제작
- 건설 거리 내에서만 배치
AI 목표 변경
planner.set_goal(
"전력 인프라 구축: offshore-pump → boiler → steam-engine → 전선 연결"
)
주의사항
- 순수 플레이이므로 걷기, 채굴, 제작에 실제 시간이 소요됩니다
- AI가 "move 먼저 → 작업" 패턴을 학습하도록 프롬프트가 설계되어 있습니다
agent_log.jsonl에 모든 행동과 타임스탬프가 기록됩니다ai_planner.py는 GLM 응답이 잘리거나(중괄호/대괄호 불일치) 마크다운이 섞여도 JSON 파싱을 복구하도록{} / []균형 추적과 보정 로직을 사용합니다.mine_resource에서 실패한 채굴 타일 제외(exclude)는 Lua와 Python 양쪽에서 정수 타일 좌표(tx, ty) 키로 통일해, 제외한 좌표가 반복 선택되지 않도록 합니다.- 또한 채굴 시작(
mining_state) 좌표는 정수 타일이 아니라, Lua가 찾은 실제 자원 엔티티의e.position(정확 실수 좌표)을 사용해 “플레이어가 타일 위에 있는데도 즉시 채굴 감지 실패”를 줄입니다. mine_resource는 move 후p.position근처(반경 1.2)에서 실제로 해당 광물 엔티티가 있는지 재확인하고, 없으면 채굴을 시도하지 않고 다음 후보로 넘어갑니다.explore는wanted_ores가 있으면 해당 자원이 발견될 때까지 멈추지 않고 계속 이동해,iron-ore처럼 주변에 흔한 자원만 계속 발견되어 진행이 막히는 문제를 줄입니다.
Description
Languages
Python
100%