안녕하세요, 모두의 AI 독자 여러분! 오늘은 모두의 AI의 홍보실 인턴 ZISOO와 연구개발팀장 ZOON이 만나 OpenAI의 새로운 o1 API에 대해 심도 있는 대화를 나눴습니다. 이 대화를 통해 o1 모델의 특징, 사용 방법, 그리고 개발자들이 알아야 할 중요한 정보들을 자세히 살펴보겠습니다.

o1 모델 소개

👩‍🦰 ZISOO: ZOON 팀장님, OpenAI가 새로운 o1 시리즈 모델을 출시했다고 들었어요. 이 모델의 특징이 무엇인가요?

👨‍🦱 ZOON: 네, o1 시리즈는 정말 흥미로운 새로운 모델입니다. 이 모델들은 복잡한 추론을 수행하기 위해 강화학습으로 훈련된 대규모 언어 모델입니다. 가장 큰 특징은 ‘생각하는 시간’을 가진다는 점입니다. 사용자에게 응답하기 전에 긴 내부적인 사고 과정을 거치죠.

성능 면에서도 매우 인상적입니다. 경쟁 프로그래밍 문제에서 89번째 백분위에 랭크되었고, 미국 수학 올림피아드 예선에서 상위 500명 안에 들었으며, 물리학, 생물학, 화학 문제에서 PhD 수준의 정확도를 넘어섰다고 합니다.

👩‍🦰 ZISOO: 와, 정말 놀라운 성능이네요! 그렇다면 현재 API를 통해 사용할 수 있는 o1 모델은 어떤 것들이 있나요?

👨‍🦱 ZOON: 현재 API를 통해 사용할 수 있는 o1 모델은 두 가지입니다:

  1. o1-preview: 광범위한 일반 지식을 활용하여 어려운 문제를 추론할 수 있도록 설계된 초기 버전의 모델입니다.
  2. o1-mini: o1의 더 빠르고 저렴한 버전으로, 광범위한 일반 지식이 필요하지 않은 코딩, 수학, 과학 작업에 특히 능숙합니다.

o1 모델 사용 방법

👩‍🦰 ZISOO: 개발자들이 이 모델을 어떻게 사용할 수 있는지 궁금해요. 사용 방법이 복잡한가요?

👨‍🦱 ZOON: 사용 방법은 비교적 간단합니다. o1-preview와 o1-mini 모두 chat completions 엔드포인트를 통해 접근할 수 있습니다. 예를 들어, Python을 사용한다면 다음과 같이 o1-preview 모델을 호출할 수 있습니다:

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
    model="o1-preview",
    messages=[
        {
            "role": "user", 
            "content": "Write a bash script that takes a matrix represented as a string with format '[1,2],[3,4],[5,6]' and prints the transpose in the same format."
        }
    ]
)

print(response.choices[0].message.content)

다만, 모델이 문제를 해결하는 데 필요한 추론의 양에 따라 응답 시간이 몇 초에서 몇 분까지 걸릴 수 있다는 점을 유의해야 합니다.

베타 버전의 한계

👩‍🦰 ZISOO: 아, 그렇군요. 그런데 이 모델들이 아직 베타 버전이라고 들었어요. 어떤 제한사항들이 있나요?

👨‍🦱 ZOON: 네, 맞습니다. 현재 베타 단계에서는 몇 가지 중요한 제한사항이 있습니다:

  1. 모달리티: 텍스트만 지원하며, 이미지는 지원하지 않습니다.
  2. 메시지 유형: user와 assistant 메시지만 지원하고, system 메시지는 지원하지 않습니다.
  3. 스트리밍: 지원하지 않습니다.
  4. 도구: tool, function-calling, response-format 관련 파라미터를 지원하지 않습니다.
  5. Logprobs: 지원하지 않습니다.
  6. 기타 파라미터: temperature, top_p, n은 1로 고정되어 있고, presence_penalty와 frequency_penalty는 0으로 고정되어 있습니다.
  7. Assistants API와 Batch API에서는 이 모델들을 사용할 수 없습니다.

OpenAI는 앞으로 몇 주 안에 이러한 파라미터들의 일부를 지원할 예정이며, 멀티모달리티와 도구 사용 같은 기능은 o1 시리즈의 향후 모델에 포함될 예정입니다.

추론 토큰과 컨텍스트 관리

👩‍🦰 ZISOO: 흥미롭네요. 그런데 ‘추론 토큰’이라는 개념이 새로 나왔다고 들었어요. 이게 무엇인가요?

👨‍🦱 ZOON: 좋은 질문입니다. o1 모델은 ‘추론 토큰’이라는 새로운 개념을 도입했습니다. 이 토큰들은 모델이 ‘생각’하는 데 사용되며, 프롬프트에 대한 이해를 분석하고 응답을 생성하기 위한 여러 접근 방식을 고려하는 데 사용됩니다.

추론 토큰은 API를 통해 직접 볼 수는 없지만, 모델의 컨텍스트 윈도우 공간을 차지하고 출력 토큰으로 청구됩니다. 따라서 개발자들은 이를 고려하여 컨텍스트 윈도우를 관리해야 합니다.

o1-preview와 o1-mini 모델은 128,000 토큰의 컨텍스트 윈도우를 제공하며, 각 완성에는 최대 출력 토큰 수 제한이 있습니다:

  • o1-preview: 최대 32,768 토큰
  • o1-mini: 최대 65,536 토큰

👩‍🦰 ZISOO: 그렇다면 개발자들이 이런 추론 토큰을 어떻게 관리해야 할까요?

👨‍🦱 ZOON: 개발자들은 max_completion_tokens 파라미터를 사용하여 모델이 생성하는 총 토큰 수(추론 토큰과 완성 토큰 모두 포함)를 제한할 수 있습니다. 또한, 응답 객체의 usage 필드에서 completion_tokens_details.reasoning_tokens를 확인하여 사용된 추론 토큰의 수를 볼 수 있습니다.

OpenAI는 이 모델들을 처음 사용할 때 추론과 출력을 위해 적어도 25,000 토큰을 예약할 것을 권장합니다. 프롬프트에 필요한 추론 토큰 수에 익숙해지면 이 버퍼를 조정할 수 있습니다.

프롬프트 작성 팁

👩‍🦰 ZISOO: 이 모델들을 효과적으로 사용하기 위한 프롬프트 작성 팁이 있을까요?

👨‍🦱 ZOON: 네, 몇 가지 중요한 팁이 있습니다:

from openai import OpenAI

client = OpenAI()

prompt = """
Instructions:
- Given the React component below, change it so that nonfiction books have red
  text. 
- Return only the code in your reply
- Do not include any additional formatting, such as markdown code blocks
- For formatting, use four space tabs, and do not allow any lines of code to 
  exceed 80 columns

const books = [
  { title: 'Dune', category: 'fiction', id: 1 },
  { title: 'Frankenstein', category: 'fiction', id: 2 },
  { title: 'Moneyball', category: 'nonfiction', id: 3 },
];

export default function BookList() {
  const listItems = books.map(book =>
    <li>
      {book.title}
    </li>
  );

  return (
    <ul>{listItems}</ul>
  );
}
"""

response = client.chat.completions.create(
    model="o1-mini",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": prompt
                },
            ],
        }
    ]
)

print(response.choices[0].message.content)
  1. 프롬프트를 간단하고 직접적으로 작성하세요. 이 모델들은 간결하고 명확한 지시를 이해하고 응답하는 데 뛰어납니다.
  2. 사고 체인 프롬프트를 피하세요. 이 모델들은 내부적으로 추론을 수행하므로 “단계별로 생각하세요” 또는 “당신의 추론을 설명하세요”와 같은 프롬프트는 불필요합니다.
  3. 구분자를 사용하여 명확성을 높이세요. 삼중 따옴표, XML 태그, 섹션 제목 등을 사용하여 입력의 다른 부분을 명확히 구분하세요.
  4. 검색 증강 생성(RAG)에서 추가 컨텍스트를 제한하세요. 추가 컨텍스트나 문서를 제공할 때는 가장 관련성 높은 정보만 포함하여 모델이 응답을 과도하게 복잡하게 만들지 않도록 하세요.

👩‍🦰 ZISOO: 와, 정말 유용한 정보들이네요. 마지막으로, 이 모델들의 실제 사용 사례를 몇 가지 소개해 주실 수 있나요?

👨‍🦱 ZOON: 물론이죠. OpenAI의 cookbook에서 몇 가지 흥미로운 사용 사례를 찾을 수 있습니다:

  1. 데이터 검증을 위한 추론 사용: 합성 의료 데이터 세트의 불일치를 평가하는 데 사용할 수 있습니다.
  2. 루틴 생성을 위한 추론 사용: 헬프 센터 문서를 사용하여 에이전트가 수행할 수 있는 작업을 생성하는 데 활용할 수 있습니다.

이외에도 복잡한 알고리즘 구현, 코드 리팩토링, 과학적 문제 해결 등 다양한 분야에서 활용될 수 있습니다.

👩‍🦰 ZISOO: 정말 흥미롭네요. o1 모델이 앞으로 어떻게 발전해 나갈지 기대됩니다. 오늘 정말 유익한 대화였습니다, ZOON 팀장님. 감사합니다.

👨‍🦱 ZOON: 저도 감사합니다, ZISOO 인턴님. o1 모델은 AI의 추론 능력을 한 단계 더 발전시킨 혁신적인 기술입니다. 앞으로 이 기술이 어떻게 발전하고 어떤 분야에서 활용될지 지켜보는 것도 매우 흥미로울 것 같습니다. 우리 모두의 AI도 이러한 기술 발전에 발맞춰 계속 연구하고 발전해 나가야겠네요.


여러분, 지금까지 ZISOO와 ZOON의 대화를 통해 OpenAI의 o1 API에 대해 심층적으로 알아보았습니다. 이 새로운 추론 모델은 AI의 문제 해결 능력을 한 단계 더 발전시켰지만, 동시에 개발자들이 주의해야 할 새로운 개념과 제한사항들도 있습니다.

AI 기술은 빠르게 발전하고 있으며, 이는 우리의 삶과 산업에 큰 영향을 미칠 것입니다. 모두의 AI는 앞으로도 이러한 최신 기술 동향을 여러분께 알기 쉽게 전달하고, AI 기술의 올바른 발전과 활용에 대해 함께 고민해 나가겠습니다.