feat: AIPlanner JSON 파싱 로직 개선 및 다중 JSON 객체 처리 추가
- `_parse_json()` 메서드에서 응답 내 여러 JSON 객체 중 `actions`를 포함한 계획 객체를 우선 선택하도록 로직 개선 - JSON 파싱 실패 시 잘림 복구 로직을 추가하여 안정성 향상 - 관련 단위 테스트 추가 및 README.md에 변경 사항 반영
This commit is contained in:
@@ -69,3 +69,19 @@ class TestAIPlannerParseJson(unittest.TestCase):
|
||||
extracted = self.planner._extract_glm_assistant_text(fake)
|
||||
self.assertIn('"current_goal":"g"', extracted)
|
||||
|
||||
def test_parse_json_selects_actions_object_when_multiple_json_objects_exist(self):
|
||||
# 분석 텍스트 안에 먼저 나오는 하위 JSON({ "foo": 1 })이 있고,
|
||||
# 뒤에 실제 계획 JSON({ "actions": [...] })이 있는 경우를 검증한다.
|
||||
raw = (
|
||||
"1. Analyze...\n"
|
||||
'{"foo": 1}\n'
|
||||
"2. Continue...\n"
|
||||
'{"thinking":"t","current_goal":"g",'
|
||||
'"actions":[{"action":"explore","params":{"direction":"east","max_steps":1},"reason":"x"}],'
|
||||
'"after_this":"a"}'
|
||||
)
|
||||
plan = self.planner._parse_json(raw)
|
||||
self.assertEqual(plan["current_goal"], "g")
|
||||
self.assertEqual(len(plan["actions"]), 1)
|
||||
self.assertEqual(plan["actions"][0]["action"], "explore")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user