feat: 추가된 메모리 기능으로 광맥 및 마지막 행동 저장
- 에이전트가 발견한 광맥 좌표를 `ore_patch_memory.json`에 저장하여 재시작 시 활용 가능 - 마지막 실행한 행동과 결과를 `agent_last_action_memory.json`에 저장하여 다음 상태 요약에서 참고 가능 - `state_reader.py`에서 메모리 로드 및 상태 요약에 포함 - `ai_planner.py`에서 시스템 프롬프트에 기억된 광맥 및 마지막 행동 관련 가이드 추가 - `README.md`에 새로운 메모리 기능 설명 추가
This commit is contained in:
93
docs/plan.md
93
docs/plan.md
@@ -112,3 +112,96 @@
|
||||
- `README.md`
|
||||
- 인벤토리 캐시 동작과 파일명(`inventory_memory.json`)을 설명
|
||||
|
||||
---
|
||||
|
||||
## 발견된 광맥 좌표 기억(메모리) 추가 계획
|
||||
|
||||
### 문제 관찰
|
||||
- `explore`로 광맥을 발견해도, 재실행/재계획/초기화 상황에서 동일 좌표를 다시 추천받지 못해
|
||||
불필요한 탐색이 반복될 수 있음.
|
||||
|
||||
### 변경 목표
|
||||
1. 자원 엔티티(광맥)의 좌표를 `ore_patch_memory.json`에 ore 종류별로 여러 패치 좌표로 저장
|
||||
2. 다음 상태 요약에서 “기억된 광맥” 섹션으로 AI에게 제공
|
||||
3. LLM이 가능하면 기억된 좌표로 먼저 이동해 `move -> mine_resource`를 수행하도록 유도
|
||||
|
||||
### 구현 범위
|
||||
- `action_executor.py`
|
||||
- `explore` 성공 시 발견한 광맥 좌표를 파일에 갱신
|
||||
- `state_reader.py`
|
||||
- `scan_resources()` 결과로도 광맥 좌표를 `ore_patch_memory.json`에 갱신
|
||||
- `summarize_for_ai()`에 “기억된 광맥” 출력 추가
|
||||
- `ai_planner.py`
|
||||
- SYSTEM_PROMPT에 기억된 광맥 우선 이동 가이드 추가
|
||||
|
||||
### README 업데이트
|
||||
- `ore_patch_memory.json` 파일과 동작 방식 설명 추가
|
||||
|
||||
---
|
||||
|
||||
## 에이전트 재시작 시 마지막 행동 기억(메모리) 추가 계획
|
||||
|
||||
### 문제 관찰
|
||||
- 코드를 수정하면 보통 에이전트를 재시작해야 하고,
|
||||
이때 `ai_planner.py`의 `feedback_log`/직전 실패 정보가 초기화되어 같은 시행착오가 반복될 수 있음.
|
||||
|
||||
### 변경 목표
|
||||
1. 재시작 시에도 “직전에 실행했던 action”과 결과(success/message)를 파일에 저장
|
||||
2. 다음 실행의 상태 요약(`state_reader.summarize_for_ai()`)에 “기억된 마지막 행동” 섹션을 포함
|
||||
3. LLM이 마지막 행동이 실패였다면 같은 행동을 즉시 반복하지 않도록 유도
|
||||
|
||||
### 저장 기준(확정)
|
||||
- 성공/실패 상관없이 **가장 마지막으로 실행을 시도한 action 1개**만 저장한다.
|
||||
|
||||
### 구현 범위
|
||||
- `main.py`
|
||||
- 행동 실행 직후 action/result를 `agent_last_action_memory.json`에 저장
|
||||
- `state_reader.py`
|
||||
- 재시작 시 파일을 로드해 상태 요약에 포함
|
||||
- `ai_planner.py`
|
||||
- SYSTEM_PROMPT에 “마지막 행동 실패 재시도 금지/원인 해결 우선” 가이드 추가
|
||||
|
||||
### README 업데이트
|
||||
- `agent_last_action_memory.json` 존재/동작 설명 추가
|
||||
|
||||
---
|
||||
|
||||
## `place_entity` BLOCKED 완화 계획 (인접 타일 탐색)
|
||||
|
||||
### 문제 관찰
|
||||
- 로그에서 `stone-furnace` 배치가 `FAIL 배치 불가`(내부적으로 `BLOCKED`)로 반복됨
|
||||
- `mine_resource`가 자원 엔티티 근처(종종 자원 패치 타일)로 이동한 뒤, 같은 좌표에 건물을 배치하려고 하면
|
||||
Factorio의 `can_place_entity` 조건에 걸려 막힐 수 있음
|
||||
|
||||
### 변경 목표
|
||||
1. `action_executor.py`의 `place_entity`에서 먼저 `surface.can_place_entity`로 배치 가능 여부를 검사
|
||||
2. 현재 좌표 `(x,y)`가 불가능하면, `(x,y)` 주변 `±1 타일` 후보(대각 포함)로 순차 시도
|
||||
3. 실제로 배치된 좌표를 결과 메시지에 포함해 이후 계획이 더 안정적으로 반복되게 함
|
||||
|
||||
### 구현 범위
|
||||
- `action_executor.py`
|
||||
- `place_entity` 로직을 (x,y) 실패 시 인접 타일 후보로 확장
|
||||
|
||||
### README 업데이트
|
||||
- `place_entity`가 `BLOCKED` 시 인접 타일을 자동 탐색하도록 동작 설명 추가
|
||||
|
||||
---
|
||||
|
||||
## GLM HTTP read timeout 대응 계획 (예외 포함 재시도)
|
||||
|
||||
### 문제 관찰
|
||||
- 로그에 `TimeoutError: The read operation timed out` 가 발생
|
||||
- 현재 `ai_planner.py`는 JSON 파싱 실패만 재시도하고, 네트워크 타임아웃/연결 오류는 별도 재시도 경로가 약함
|
||||
|
||||
### 변경 목표
|
||||
1. `AIPlanner.decide()`의 재시도 예외 범위를 `TimeoutError`, `ConnectionError`, `urllib.error.URLError`까지 확장
|
||||
2. 해당 오류가 발생하면 동일한 “plan 응답 받기” 재시도로 복구 시도
|
||||
3. 3회 연속 실패 시에는 기존과 동일하게 `explore` 기본 행동으로 폴백
|
||||
|
||||
### 구현 범위
|
||||
- `ai_planner.py`
|
||||
- `decide()`의 `except` 절 범위 확장 및 경고 로그 보강
|
||||
|
||||
### README 업데이트
|
||||
- GLM read timeout/연결 오류 발생 시 재시도 동작을 `주의사항`에 추가
|
||||
|
||||
|
||||
Reference in New Issue
Block a user