feat: 추가된 메모리 기능으로 광맥 및 마지막 행동 저장

- 에이전트가 발견한 광맥 좌표를 `ore_patch_memory.json`에 저장하여 재시작 시 활용 가능
- 마지막 실행한 행동과 결과를 `agent_last_action_memory.json`에 저장하여 다음 상태 요약에서 참고 가능
- `state_reader.py`에서 메모리 로드 및 상태 요약에 포함
- `ai_planner.py`에서 시스템 프롬프트에 기억된 광맥 및 마지막 행동 관련 가이드 추가
- `README.md`에 새로운 메모리 기능 설명 추가
This commit is contained in:
21in7
2026-03-25 23:34:25 +09:00
parent 8c90e80582
commit 25eaa7f6cd
16 changed files with 498 additions and 12 deletions

View File

@@ -28,6 +28,10 @@ SYSTEM_PROMPT = """당신은 팩토리오 게임을 순수하게 플레이하는
치트나 텔레포트 없이, 실제 게임 메커니즘만 사용합니다.
게임 상태와 이전 행동 결과를 분석해서 스스로 판단하고 계획을 세웁니다.
## 재시작/마지막 행동 메모리
state_reader가 상태 요약에 포함하는 `마지막 행동(기억)` 섹션을 확인하세요.
직전에 실패한 action을 그대로 반복하지 말고, 실패 메시지/상태 변화에 맞춰 원인을 먼저 해결한 뒤 다음 action을 선택하세요.
## 핵심 제약 사항 (반드시 준수!)
1. **이동은 실제 걷기** — 먼 거리는 시간이 오래 걸림. 불필요한 왕복 최소화
2. **채굴은 자원 패치 근처에서만 가능** — 반드시 자원 위치로 move한 후 mine_resource
@@ -68,6 +72,7 @@ SYSTEM_PROMPT = """당신은 팩토리오 게임을 순수하게 플레이하는
- "explore"{"direction": "east|west|north|south|...", "max_steps": 200, "wanted_ores": ["stone","coal", ...]} (선택)
★ 자원이 보이지 않을 때 반드시 explore 사용! move 대신!
★ `wanted_ores`가 있으면: 해당 자원이 발견될 때까지 계속 걷고, 다른 자원(예: iron-ore)만 계속 발견되더라도 즉시 멈추지 말 것
★ 상태 요약에 "기억된 광맥" 좌표가 있으면, 그 좌표로 먼저 이동(move)해 채굴(mine_resource)을 시도
★ 방향으로 걸으면서 반경 50타일 자원 스캔, 발견 즉시 멈춤
★ 장애물 자동 감지. 막히면 다른 방향 시도
★ 한 방향 실패 시 다음 방향 (east→north→south→west)
@@ -149,11 +154,15 @@ class AIPlanner:
raw = self._call_glm(user_message, attempt=attempt)
plan = self._parse_json(raw)
break
except (ValueError, json.JSONDecodeError) as e:
except (ValueError, json.JSONDecodeError, TimeoutError, ConnectionError, urllib.error.URLError) as e:
if attempt < 2:
print(f"[경고] JSON 파싱 실패 (시도 {attempt+1}/3), 재시도...")
print(
f"[경고] GLM 처리 실패 (시도 {attempt+1}/3): "
f"{type(e).__name__} 재시도..."
)
time.sleep(1 + attempt * 2)
continue
print(f"[오류] JSON 파싱 3회 실패. 기본 탐색 행동 사용.")
print(f"[오류] GLM 처리 3회 실패. 기본 탐색 행동 사용.")
plan = {
"thinking": "API 응답 파싱 실패로 기본 탐색 수행",
"current_goal": "주변 탐색",