AI 에이전트와 ReAct 프롬프트 (이를 이용해서 프리즘 봇 업데이트 중!)

안녕하세요 준호입니다.

처음으로 인사이트 공유를 하는 것 같습니다.

비록 글쓰는 재주는 없지만, 글을 읽어주시는 분들에게 조금이나마 도움이 되었으면 합니다.😉

AI 에이전트란 무엇인가요?

여러분이 최근 중간고사를 치뤘다고 가정해보겠습니다. 만약 챗GPT에게 과학 점수를 물어본다면 대답할 수 있을까요?

정답은 당연히 아니겠죠!

글꼴 유형의 흑백 이미지

이것이 기존 LLM 모델의 한계점이라고 할 수 있습니다. 실제 데이터를 이용해서 사용자의 요구에 맞도록 동적인 응답을 할 수 없죠.

AI 에이전트는 이러한 한계점을 극복하고 동적인 응답을 할 수 있도록 설계된 서비스라고 할 수 있습니다.

이번 인사이트 공유글에서는 AI 에이전트를 구축하는 ReAct 프롬프트 기법에 대해 공유해드리려고 합니다.

또 새로운 워딩이 나왔네요!

ReAct 프롬프트가 뭔가요?

ReAct 프롬프트에 대해 확실히 알기 위해서는 AI 에이전트의 구조와 구동되는 방식에 대해 알 필요가 있습니다.

AI 에이전트는 2가지의 요소로 구성이 되는데요.

  1. 외부 함수(Action)

    AI 에이전트가 사용할 수 있는 도구를 정의하는 것 입니다. 이는 간단한 함수에서부터 API 호출까지 AI 에이전트가 작업을 수행할 수 있도록 해주는 것이죠!

  2. 시스템 프롬프트

    AI 에이전트를 구동시키는 프롬프트입니다. 여기서 적용되는 프롬프트를 ReAct 프롬프트라고 말하는데요, 말 그대로 다시(Re) 행동(Act)하도록 하는 프롬프트입니다. 아래에서 자세하게 다루겠습니다.

AI 에이전트의 핵심은 사고-행동-응답 루프에 있습니다. 가장 중요한 워딩입니다.

우리의 뇌가 처리하는 방식과 비슷하다고 보면 됩니다.

만약 와이프가 저에게 "우리 결혼 기념일이 언제야?"라는 기습적인 질문을 했다고 가정해봅시다.

기습적인 공격을 받은 저는 당황하지 않고 우선 생각을 하겠죠! '우리 기념일이 언제더라?'(사고) 그리고는 뇌가 생존 본능을 발휘해서 기억 속에서 우리의 결혼 기념일을 기억해 낼 겁니다.(행동) 마무리로 와이프에게 얘기하겠죠. "00월 00일이잖아~"(응답).

이러한 인간의 사고 회로를 비슷하게 구현하도록 작성된 시스템 프롬프트가 바로 ReAct 프롬프트인 것입니다.

이제 ReAct 프롬프트의 예시를 보시죠! 😆

ReAct 프롬프트

You run in a loop of Thought, Action, PAUSE, Action_Response.
At the end of the loop you output an Answer.
Use Thought to understand the question you have been asked.
Use Action to run one of the actions available to you - then return PAUSE.
Action_Response will be the result of running those actions.
Your available actions are:
get_score:
e.g. get_score: 수학
Returns the score of the subject.
Example session:
Question: 내 수학 점수는 몇점이니?
Thought: I should check the score for the subject first.
Action: 
{
  "function_name": "get_score",
  "function_parms": {
    "sub": "수학"
  }
}
PAUSE
You will be called again with this:
Action_Response: 24
You then output:
Answer: 당신의 수학 점수는 24점이에요.

여기서 중요하게 살펴 봐야 하는 부분은 총 3가지가 있습니다. 하나씩 쪼개서 살펴봅시다! 👊

첫 번째로, 프롬프트에서 AI 에이전트가 사용자의 입력을 받았을 때, 취할 행동을 설정한 것 입니다.

You run in a loop of Thought, Action, PAUSE, Action_Response.
At the end of the loop you output an Answer.

AI 에이전트가 우선 생각을 하고 외부 함수를 호출 해야 하는지 스스로 생각하고 선택하도록 합니다. 이후 필요하다고 판단이 되면 외부 함수를 호출하면서 Pause 상태로 들어갑니다. 이후 외부 함수에서 응답이 오면 해당 응답을 바탕으로 최종 응답을 생성해서 제시하도록 설계가 되어 있습니다.

두 번째로, 해당 AI 에이전트가 사용할 수 있는 외부 함수를 정의하는 것 입니다.

Your available actions are:
get_score:
e.g. get_score: 수학
Returns the score of the subject.

해당 프롬프트를 살펴보면 AI 에이전트가 사용 가능한 외부 함수를 get_score라는 함수로 한정하고 있고 해당 함수를 통해 얻을 수 있는 응답을 예시로 표시해주고 있습니다.

마지막으로, 가장 중요한 부분인데요, 이러한 루프 과정을 전체적으로 예시를 들어주는 것입니다.

Example session:
Question: 내 수학 점수는 몇점이니?
Thought: I should check the score for the subject first.
Action: 
{
  "function_name": "get_score",
  "function_parms": {
    "sub": "수학"
  }
}
PAUSE
You will be called again with this:
Action_Response: 24
You then output:
Answer: 당신의 수학 점수는 24점이에요.

사고와 행동, Pause, Action 응답, 최종 응답 생성까지 루프의 모든 과정의 예시를 작성해줌으로써 AI 에이전트가 더욱 확실하게 구동 될 수 있도록 도와주는 것이죠!

다음으로 get_score 함수를 다음과 같이 작성해보았는데요.

def get_score(sub):
    if sub == "수학":
        return 24
    if sub == "영어":
        return 80
    if sub == "과학":
        return 100

이제 해당 AI 에이전트에게 나의 과학 점수를 물어보면 100점이라는 응답이 와야겠죠!?

물론 이를 위해서는 JSON 응답 처리와 OpenAI API 호출 코드 등이 작성되어야 하지만 여기에 다 작성할 수 없는 관계로 결과만 빠르게 보여드리겠습니다.

Adobe C#의 코드 편집기 스크린샷

과학 점수를 물어보니 100점이라고 잘 대답을 해주었네요!

그렇다면 영어 점수도 물어볼까요?

Adobe 코드 편집기의 스크린샷

실제 데이터에 맞도록 80점이라고 잘 응답해주었습니다!

여기까지 AI 에이전트의 구조와 구동되는 방식에서 부터 ReAct 프롬프트까지 알아보았습니다!

최대한 쉽도록 설명하고자 노력했는데요, 이해가 잘 되실지는 모르겠습니다...!

하지만 이렇게 또 성장해나가는 것이니까요, 궁금한 점이 있다면 언제든 답글 남겨주시면 감사하겠습니다!

총총 🤗

11
2개의 답글

👉 이 게시글도 읽어보세요