feat: mining_state 설정 최적화 및 GLM 예외 처리 개선
- `mine_resource` 함수에서 채굴 상태를 매 루프마다 반복 설정하던 로직을 제거하여, 우클릭 유지와 유사한 동작으로 최적화 - GLM API 호출 실패 시 예외 처리 로직을 개선하여, 다양한 오류 원인을 로그로 출력하고 상태 요약 기반의 폴백 로직 추가 - 새로운 연결 검사 스크립트 추가 및 README.md에 GLM API 연결 문제 디버깅 섹션 추가 - 관련 문서 및 주의사항 업데이트
This commit is contained in:
53
docs/plan.md
53
docs/plan.md
@@ -1,3 +1,19 @@
|
||||
## 채굴 시 mining_state 반복 설정 제거 (우클릭 유지)
|
||||
|
||||
### 문제
|
||||
- `mine_resource` 내부에서 약 0.1초마다 `update_selected_entity` + `mining_state = { mining = true, ... }`를 RCON으로 재전송하고 있었음.
|
||||
- 플레이어는 보통 우클릭을 **누른 채 유지**하는데, 스크립트는 매번 상태를 다시 써서 **뗐다 누르는(re-trigger)** 것에 가까운 동작이 됨.
|
||||
|
||||
### 변경
|
||||
- 이동·근처 광물 확인 후, 채굴 루프 **진입 직전에 한 번만** `mining_state` 설정.
|
||||
- 루프에서는 `sleep`과 인벤토리/채굴 진행률 **읽기만** 수행. 종료·목표 달성 시에만 `mining = false`.
|
||||
|
||||
### 범위
|
||||
- `action_executor.py` — `mine_resource`
|
||||
- `README.md` — 동작 설명 한 줄 보강
|
||||
|
||||
---
|
||||
|
||||
## 채굴 실패 시 제외 좌표 반복 버그 수정 계획
|
||||
|
||||
### 문제 재현/관찰
|
||||
@@ -202,7 +218,7 @@
|
||||
### 변경 목표
|
||||
1. `AIPlanner.decide()`의 재시도 예외 범위를 `TimeoutError`, `ConnectionError`, `urllib.error.URLError`까지 확장
|
||||
2. 해당 오류가 발생하면 동일한 “plan 응답 받기” 재시도로 복구 시도
|
||||
3. 3회 연속 실패 시에는 기존과 동일하게 `explore` 기본 행동으로 폴백
|
||||
3. 3회 연속 실패 시에는 상태 요약 기반 휴리스틱(광맥 있으면 채굴/이동, 없으면 explore 방향 순환)으로 폴백
|
||||
|
||||
### 구현 범위
|
||||
- `ai_planner.py`
|
||||
@@ -211,3 +227,38 @@
|
||||
### README 업데이트
|
||||
- GLM read timeout/연결 오류 발생 시 재시도 동작을 `주의사항`에 추가
|
||||
|
||||
---
|
||||
|
||||
## GLM 전부 실패 시 explore 무한 루프 완화 (상태 기반 폴백)
|
||||
|
||||
### 문제 관찰
|
||||
- GLM API가 `TimeoutError`/`ConnectionError`로 연속 실패하면 폴백이 항상 `explore`(고정 east)만 선택됨
|
||||
- 이미 `주변 자원 패치`·`기억된 광맥`에 철/석탄 좌표가 있는데도 탐색만 반복되어 진행이 멈춤
|
||||
|
||||
### 변경 목표
|
||||
1. `state_reader.summarize_for_ai()` 텍스트에서 플레이어 위치·앵커/기억 광맥 좌표를 정규식으로 추출
|
||||
2. 광맥이 있으면 `mine_resource` 우선(거리가 크면 `move` 선행), 없을 때만 `explore` 방향 순환
|
||||
3. 기본 HTTP 타임아웃 90초→120초, 재시도 간격 소폭 완화
|
||||
|
||||
### 구현 범위
|
||||
- `ai_planner.py`: `_fallback_plan_from_summary`, `_parse_player_position`, `_parse_ore_anchors`, 환경변수 `GLM_HTTP_TIMEOUT_SECONDS`, `GLM_FALLBACK_MOVE_THRESHOLD`
|
||||
|
||||
### README 업데이트
|
||||
- 폴백 동작 및 환경변수 설명 반영
|
||||
|
||||
---
|
||||
|
||||
## GLM 예외 상세 로그 + 연결 검사 스크립트
|
||||
|
||||
### 목표
|
||||
- `TimeoutError`/`ConnectionError` 한 줄만으로는 DNS·SSL·프록시·HTTP 본문 오류를 구분하기 어려움
|
||||
- `URLError.reason`·체인 예외·errno를 항상 출력하고, `GLM_DEBUG=1`에서 스택까지 확보
|
||||
- `scripts/glm_connection_check.py`로 최소 POST만 수행해 네트워크/API 키를 분리 진단
|
||||
|
||||
### 구현
|
||||
- `ai_planner.describe_glm_exception()`, `_glm_debug_enabled()`
|
||||
- `scripts/glm_connection_check.py`
|
||||
|
||||
### README
|
||||
- `GLM API 연결 문제 디버깅` 절 추가
|
||||
|
||||
|
||||
Reference in New Issue
Block a user