LLM을 활용한 효과적인 플래닝 방법론 강의 리뷰
플래닝(Planning)은 어떤 자원들을 가지고 있고 할 수 있는 일이 무엇이 있으며 제약사항에 주의하여 원하는 결과를 얻을 수 있도록 작업의 순서를 만드는 일입니다.
추론 LLM의 추론 기능을 플래닝 과정에도 적용할 수 있습니다.

본 리뷰는 Deeplearning AI사와 OpenAI사가 공동으로 마련한 ChatGPT O1강좌 내용중 O1을 플래닝에 적용하는 강의에 대한 내용입니다.
위의 예제를 설명하는 강의에서는 O1-mini 모델과 gpt-4o-mini모델을 사용하여 추론 LLM을 플래닝에 적용하는 예를 설명합니다.
강의에 사용된 프로그램은 아래의 시나리오로 처리됩니다.
프로그램 시나리오
메세지 리스트 초기화
메세지는 일반적인 리스트 형태로 O1 모델과 LLM agent에 입력과 추력을 저장하는 로그및 프롬프트와 출력을 저장하기 위한 공간입니다.
맥락 설정
- 제품, 공급사, 납품 방법, 고객사 등등이 정의
- 정보를 저장하기 위한 내부 database로 사용
O1 모델에 제공 될 프롬프트 작성
- 롤 설정
- 공급망 관리 어시스턴트
- 해야 할 task에 대한 설명
- 복잡한 일이고 잘 생각해야 함
- 현재 문제점에 대해 파악하고 고객 주문, 제고 관리 그리고 배송까지 할 수 있는 상세한 계획 설정
- 사용할 수 있는 도구(Tool)에 대한 설명
- O1 자체가 접근할 수 있는 LLM agent가 있다고 설명
- LLM의 역할은 O1이 만든 계획을 실행하고 결과를 반환하는 일
- LLM agent가 호출할 수 있는 함수들에 대한 설명
- 함수의 이름
- 입력 파라미터들에 대한 설명
- 함수의 동작 내용과 반환하는 데이터에 대한 설명
- 계획을 작성할 때 따라야 하는 구체적인 결과에 대한 예 설정
- 논리적이고 단계별로 계획이 작성되어야 함
- 계획을 출력할 때 포맷 설정
- 주요 액션은 숫자로 시작되어야 함
- 주요 액션에 종속되는 상세 액션은 숫자와 알파벳으로 순서가 표신 되어야 하며 새로운 문장을 시작되어야 함
- 조건이 필요한 경우 “만약…이면…그렇지 않으면…”의 형태로 표시되어야 함 (예 제시)
- 주어진 함수를 호출해야 하는 경우 백틱을 써서 호출되는 함수이름을 표시할 것
- 최종 작업에서는 LLM agent가 작업을 종료할 수 있도록 위의 함수들에 제시된 “마지막 작업”함수를 반드시 호출할 것
- 각 단계별로 왜 그렇게 기획했는지 상세하게 표현할 것
- 사용자로부터 입력되는 시나리오는 별도로 분리하여 입력 시나리오만 변화가 가능하도록 분리
- O1 자체가 접근할 수 있는 LLM agent가 있다고 설명

LLM agent에게 입력할 프롬프트 작성
- 역할 설정
- 입력되는 주문에 대한 실행을 할 것
- 내부 규약을 잘 이해하고 이에 필요한 실행을 수행할 것
- 단계에 대한 설명
- 주문 접수에 대한 내부 규약을 읽고 이해할 것
- 내부 규약 중 어떤 단계를 수행해야 할 지 결정할 것 그리고 규정대로 업무를 수행할 것
- 실행하고 있는 액션에 대해 설명할 것
- 입력 될 파라미터와 필요한 함수를 수행할 것
- LLM agent에게 입력될 “policy” 부분은 변수로 처리하여 분리 시킴
함수 들의 설명
O1 모델에 제공되었던 프롬프트 내부의 text 정보를 별도로 Json format으로 파이썬 코드화
Tool 함수들에 대한 직접 구현
- 주로 context로 정의되어 있는 자재, 공급사, 재고양등과 같은 database를 읽고 update하는 내용
- 각 튜플들에 대해 update되는 방식에 따라 예외 처리
- 예) 재고가 없는 경우 에러 반환
전체 process를 구현하는 함수를 파이썬으로 구현
- 입력은 별도의 스트링으로 “시나리오”를 입력으로 받음
- 해당 “시나리오”는 고객의 주문과 같은 최상위 비지니스 요구사항
- 입력된 시나리오로 O1의 프롬프트를 입력하여 O1의 출력을 받음 -> 플랜으로 텍스트 저장
LLM agent와 상호작용하는 함수 구현
- 기본적으로 endless loop 구조
- 초기명령을 plan 으로 받아들이고 재귀적으로 LLM agent에서 나오는 출력을 입력으로 사용하여 다음 단계로 진행하는 순환문
- 마지막 작업을 수행하는 함수를 호출하는 경우 (Prompt를 사용하여 LLM agent에 지시) 무한루프를 종료
시사점

LLM을 활용한 효과적인 플래닝 강의에서 예제로 제공되는 LLM agent와 상호작용하는 로컬서버의 프로그램 구조에 대해서 배울 수 있었습니다.
LLM agent로 사용되는 gpt-4o-mini 모델은 이른 바 “function call”을 지원하는 LLM 모델입니다.
LLM에서 지원하는 function call은 사용자의 맥락을 이해하고 함수의 기능과 입력 파라미터들에 대해서도 이해할 수 있습니다.
자연어로 기술된 작업지시에 대해 그에 해당하는 함수와 함수에 입력되는 파라미터 값을 결정하여 텍스트로 반환합니다.
강의에서 배울 수 있었던 주요 프로그램 테크닉은
- 함수를 설명하는 프롬프트 만들기
- 텍스트로 반환되는 함수이름과 파라미터 값들을 추출하여 파이썬 함수를 호출해 주는 프로그램 처리방법
- 프로그래머가 전체적인 비지니스 로직을 만들지 않고 LLM agent를 사용하여 문제를 해결하는 방식인 이른바 이벤트 핸들러 기반 LLM agent 처리방식등은 한 번 눈여겨 보는 것이 좋다고 추천할 수 있습니다.
아울러 O1이 제공하는 이른바 planning 기능들은 LLM agent들에 대한 프롬프트 작성기능에 적용될 수 있다는 저이 유용한 유스케이스 라는 점을 알게 되었습니다.
이른바 자연어 처리 그리고 그에 기반한 지식에 기반한 plannig기능은 최적의 작업 경로를 찾아내고 해당 작업의 자세한 지시사항에 대해 꼼꼼하게 작업지시를 하는 텍스트 문서를 만들어 낼 수 있다는 점이 흥미로왔습니다.
![A logo representing a calm, happy Sweden countryside village with only blue color palette [and has a minimalist and modern style] [incorporating elements of nature] [with a touch of Scandinavian design] [that reflects a sense of community]](https://raonstad.com/wp-content/uploads/2024/03/img-rsVXmvlyKd0umO7b2rMmaUnI.png)