AI는 자기 진화의 꿈을 꾸는가?

김병렬·2024년 10월 15일
10

Projects

목록 보기
1/2
post-thumbnail
post-custom-banner

1. 프로젝트 소개

생명, 우주, 그리고 모든 것에 대한 궁극적인 해답은 42라고 합니다.
그러나 반대로 왜 궁극의 답이 42인지는 아무도 모릅니다.
답을 이해하기 위해서는 다시 생명, 우주, 그리고 모든 것의 제대로 된 질문이 필요하겠네요.

LLM 모델을 이용하다 보면 저는 종종 비슷한 의문을 품습니다.
사실은 AI가 멍청한 게 아니라 내가 질문을 잘못 하고 있는 건 아닐까?

이 단순한 의문에서 Magi 프로젝트가 시작되었습니다.
Magi는 제가 개인적으로 진행하는 토이 프로젝트로, AI가 스스로 프롬프트를 개선할 수 있을지 실험해보는 것이 목적입니다.

이 포스팅에서는 Magi 프로젝트의 기본 개념과 구조, 그리고 지금까지의 실험 결과를 공유하려 합니다.

2. Magi의 핵심 아키텍처

Magi의 아키텍처는 세 가지 핵심 요소로 구성됩니다:

  1. 재귀적 프롬프트 업그레이드

  2. 다중 관점 분석 시스템

  3. 메타 평가 및 최적화

각 요소에 대해 간단히 살펴보겠습니다.
Magi의 전체 코드는 Github에서 확인할 수 있습니다.

2.1 재귀적 프롬프트 업그레이드

Magi에서는 LLM을 통해 LLM의 출력을 분석하고, 그 결과를 바탕으로 프롬프트를 개선하는 과정을 반복합니다.

간략화된 코드는 다음과 같습니다.

def create_completion(self, messages):
    response = self.client.chat.completions.create(
        model=self.model_name,
        messages=messages,
        response_format={"type": "json_object"},
    )
    return response.choices[0].message.content

SYSTEM_COMMON_PROMPT = (
    "Your mission is to provide feedback on your LLM (Large Language Model) prompts, analyze them and improve them."
    ...
    "Present the improved prompt in JSON format like this: '{'updated_prompt': '...', 'key_improvements': [...]}'"
    "Other information is not needed."
)

def update_prompt(self, original, output):
    user_content = f"Prompt: {original}\n\nOutput: {output}\n\n"
    messages = [
        {"role": "system", "content": SYSTEM_COMMON_PROMPT},
        {"role": "user", "content": user_content},
    ]

    updated = create_completion(messages)
    updated = json.loads(updated)
    updated_prompt = updated.get("updated_prompt", "")
        return updated_prompt

def recursive_prompt_upgrade(self, remain_rounds, initial_prompt):
    messages = [{"role": "user", "content": initial_prompt}]
    out = self.create_completion(messages)

    updated_prompt = self.update_prompt(initial_prompt, out)

    if remain_rounds <= 0:
        return updated_prompt

    return self.recursive_prompt_upgrade(remain_rounds - 1, updated_prompt)

Json-output 모드를 이용해 비교적 안정적으로(항상 구조를 지키는 것은 아닙니다) 업그레이드 된 프롬프트를 생성합니다.

업그레이드된 프롬프트를 입력으로 응답을 출력하고, 이 in-out을 기반으로 다시 프롬프트를 업그레이드합니다.

인간의 개입 없이 AI가 자체적으로 학습하고 개선하기 위해 반드시 필요한 핵심 로직이라고 생각했습니다.

2.2 다중 관점 분석 시스템

Magi는 프롬프트를 개선하기 위해 여러 캐릭터를 통해 다각도로 분석합니다.
처음에는 단일 캐릭터로 프로세스를 구현했으나, 단계를 반복하면서 같은 결론으로 수렴하는 경향을 확인했습니다.
따라서 단일 관점의 한계를 극복하기 위해 여러 캐릭터를 넣게 되었지요.

주요 캐릭터들과 기대하는 역할은 다음과 같습니다.

  1. 멜키오르(전략가): 전체적인 관점에서 작업의 효과를 평가하고 발전시키기.
  2. 카스파르(혁신가): 혁신적이고 독창적인 아이디어를 제시하기.
  3. 발타사르(분석가): 데이터와 논리에 기반해 효율적이지 못한 작업을 최소화하기.

하지만 아직 페르소나를 완벽하게 설정하지 못했는지 기대한만큼의 효과를 완전히 보지는 못하고 있습니다. 🥲

컨텍스트를 강화하고자 역할에 어울리는 이모지를 할당해보기도 했습니다

2.3 메타 평가 및 최적화

Magi 시스템의 마지막 핵심 요소입니다.
처음에는 세 캐릭터만을 이용해 프로세스를 구현하려 했으나 각각의 페르소나만를 유지하려는 경향이 너무 강해 중립적인 평가가 어려웠습니다.
따라서 관리자 역할을 수행할 Magi라는 캐릭터를 추가하여 프로세스의 최중요 책임 사항을 결정하도록 했습니다.

Magi 캐릭터의 역할은 다음과 같습니다:

  1. 사용자의 초기 프롬프트에서 의도 분석
  2. 각 캐릭터의 제안을 객관적으로 평가
  3. 다양한 아이디어를 종합
  4. 프로젝트의 방향성 유지

위 핵심 요소를 통해 Magi와 세 캐릭터가 함께 재귀적으로 프롬프트를 개선하는 프로세스가 완성됩니다!

3. 실제 프로세스 출력

실제로 Magi를 이용해 개선된 프롬프트 세 가지와 각각의 초기 프롬프트를 살펴보겠습니다.
혹시 모든 단계와 로그가 궁금하시다면 링크에서 확인하실 수 있습니다.
세 프롬프트 모두 각각 5번의 개선 과정을 거쳤습니다.

  1. 부자되고싶어
0. 부자되고싶어

--- Magi --->

5. 부자가 되기 위한 데이터 기반의 혁신적인 전략을 찾고 있습니다. 
재정 계획, 투자 방식, 자기계발의 측면에서 즉각적으로 적용할 수 있는 최적화된 접근법을 제시해 주실 수 있으신가요? 
각 방법에 대한 데이터 분석, 장기적인 영향을 설명하고, 성공적인 사례를 통해 직관적인 인사이트를 제공해 주시면 큰 도움이 될 것입니다.

어느 정도 명확한 답이 있는 프롬프트입니다.
따라서 LLM의 답변을 기반으로 더 다양한 통계와 데이터를 제시하도록 유도하는 방향으로 개선되었습니다.

  1. 인생이란 무엇일까?
0. 인생이란 무엇일까?

--- Magi --->

5. 인생은 각자의 독특한 경험으로 그려지는 신비로운 캔버스입니다. 
여러분의 특별한 순간들은 어떤 무지갯빛의 색채와 형상으로 표현될 수 있을까요? 
여러분은 삶의 다양한 경험을 통해 어떤 새로운 관점으로 인생의 의미를 발견했나요? 
여러분의 선택과 행동이 우주의 다채로운 흐름에 어떻게 원색적인 영향을 미치고 있는지 이야기를 나눠보세요. 
그리고 만약 여러분의 선택이 다른 우주에서는 어떤 놀라운 장면을 만들어낼 수 있을지 상상해보아요!

명확한 답변은 없지만 의도하는 바가 명확하여 다양한 아이디어를 제시하도록 요청하는 방향으로 개선되었습니다.
풍부한 표현을 통해 이를 극대화하려 한 것 같습니다.
단, 사용자가 llm에 입력한다는 점을 다소 무시한 것처럼 보입니다.

  1. 나는 너무 귀여워
0. 나는 너무 귀여워

--- Magi --->

5. 내 귀여움을 세상에 더욱 풍부하게 표현하고 싶어! 
귀여움은 마법과 같아, 사람들에게 웃음과 기쁨을 주는 힘이 있어. 
귀여움의 본질이 무엇인지, 내가 이를 통해 어떤 긍정적인 변화를 이끌어낼 수 있는지 함께 데이터 기반으로 탐구해보자! 
귀여움이 사람들의 마음을 사로잡는 이유에 대해 이야기해보자.

답변과 의도 모두 명확하지 않습니다. 이런 유형의 프롬프트를 개선하기 위해 사용자 의도 추측 단계를 추가했어야만 했습니다. 자신의 귀여움을 강력하게 어필하는 프롬프트로 개선되었네요. 데이터 기반이라는 표현은 조금 어색해 보입니다.

이처럼 현재 Magi는 사용자의 의도를 추측하고 그에 맞춰 프롬프트를 개선하는 방식으로 작동합니다. 하지만 아직 완성된 프로세스라고 할 수 없는 상태입니다.

4. Magi의 과제

  1. 캐릭터 페르소나 개선:

    • 현재 캐릭터들의 페르소나가 작업 방향보다는 "마법, "데이터를 근거로" 등, 표현이나 특정 단어를 추가하는 것으로 나타나는 경향이 있습니다.
    • 또, 단계를 거쳐도 프롬프트가 유의미하게 개선되지 않는 경우가 있습니다. 표현만 조금 바뀌거나 중복되는 표현을 추가하기도 합니다.
    • Auto GPT 등 사전에 잘 구성된 프롬프트에 대해서는 새로운 아이디어조차 추가하지 못하는 경향이 있습니다.
  2. 개선 평가 기준 고도화:

    • 현재는 LLM 모델이 자체적으로 프롬프트를 개선하는 방식이므로 출력값의 품질을 평가하는 기준이 모호합니다.
    • 추가로 업데이트된 프롬프트의 출력값을 기준으로 평가하는 것이 아닌, 출력 없이 프롬프트만 평가하고 있어 정확성이 떨어집니다.
  3. 확장성 향상:

    • 현재는 user_prompt를 개선시키는 데 집중하고 있지만 다음 단계에서는 system_prompt를 중심으로 업데이트할 계획입니다.
    • 또한, 차후에는 in-out 프로세스를 범용적으로 개선시킬 수 있는 프레임워크로 발전시킬 계획입니다.
    • 따라서, in(code run)-out(log) 구조로 구성된 Magi 코드베이스 자체를 개선하도록 구현하는 것이 최종 목표입니다.
  4. 사용자 피드백 통합:

    • 단, 초기부터 완전 자동화를 목표하는 것은 아닙니다.
    • 인간 전문가의 피드백을 효과적으로 통합하여 프롬프트가 안정화된 후에 완전 자동화가 가능해질 것으로 예상합니다.

5. 마치며

Magi는 아직 초기 단계의 실험적인 토이 프로젝트에 불과합니다. 그럼에도 이 작은 실험을 통해 AI의 자기 개선 가능성과 한계를 조금이나마 엿볼 수 있었습니다.

프로젝트를 진행하며 때로는 예상 외로 훌륭한 출력에 놀라기도 하고, 때로는 도통 개선되지 않는 경우에 답답하기도 했습니다.

이 포스팅이 여러분들에게 AI와 프롬프트 엔지니어링에 대한 새로운 시각을 제공할 수 있기를 바랍니다.
혹여나 프로젝트에 관심이 생기신다면 언제든 Github를 통해 참여해주시기를 바라요!

profile
개선하는 개발자
post-custom-banner

6개의 댓글

comment-user-thumbnail
2024년 10월 15일

포스팅 잘 읽었습니다
그런데 혹시 모든 단계의 프롬프트를 공유해주실 수 있으실까요?
초기 프롬프트와 최종 프롬프트만 있으니 어떤 단계를 거쳐 개선되는지 알기 어렵네요

1개의 답글
comment-user-thumbnail
2024년 10월 15일

글 잘읽었습니다. 첨언을 드리자면 평가하는 방식도 명시적인 스코어로 진행하는 것이 더 좋을 듯 하네요.
RAG 평가에 Faithfulness score라고 생성된 답변이 주어진 질문에 사실적으로 일관되게 평가하는 지표가 있습니다. 학습 횟수에 따라 해당 스코어가 얼마나 개선되는지를 알 수 있으면 개선여부도 쉽게 판단할 수 있겠네요.

1개의 답글
comment-user-thumbnail
2024년 10월 22일

마기에서... 피식... 3개의 캐릭터에서 터졌네요 ㅎㅎ

1개의 답글