Sign in to save your progressYou can keep reading without an account, but completed lessons won't be saved.
Sign in

지금까지 작성한 코드는 Claude와의 매우 간단한 교환을 시뮬레이션합니다. 하지만 대화를 계속하고 싶을 때는 어떻게 될까요? "1+1은 얼마인가요?"라고 질문한 후 "3을 더 더하면?"과 같은 후속 질문을 하면, Claude가 이전 결과인 2에 3을 더하는 것을 이해할 것이라고 예상할 수 있습니다.

하지만 Bedrock API와 Claude 자체에 대해 이해해야 할 중요한 사항이 있습니다.

메시지 저장 없음

Bedrock과 Claude는 어떤 메시지도 저장하지 않습니다. 보낸 메시지는 저장되지 않으며, 받은 응답도 저장되지 않습니다. 각 API 호출은 완전히 독립적입니다.

컨텍스트를 유지하는 여러 메시지로 대화를 나누려면 다음을 수행해야 합니다:

  • 코드에서 모든 메시지 목록을 수동으로 유지 관리
  • 각 후속 요청과 함께 전체 메시지 목록 제공

컨텍스트가 중요한 이유

적절한 컨텍스트 없이 어떤 일이 일어나는지 살펴보겠습니다. "3을 더 더하면?"을 단독 메시지로 보내면, Claude는 당신이 무엇을 말하는지 전혀 알 수 없습니다. Claude는 최선을 다해 응답하겠지만, 이전 대화의 컨텍스트가 없기 때문에 답변이 말이 되지 않을 것입니다.

후속 질문만 보내면, Claude는 그 고립된 메시지만 보고 이전의 "1+1은 얼마인가요?" 교환에 대해 알지 못한 채 응답하려고 합니다.

대화 컨텍스트 구축

컨텍스트를 유지하려면 각 요청에 전체 대화 기록을 포함해야 합니다. 작동 방식은 다음과 같습니다:

메시지 목록에는 사용자 메시지와 어시스턴트 응답을 포함한 이전의 모든 교환이 포함되어야 합니다. 이 전체 컨텍스트를 보내면, Claude는 "3을 더 더하면?"이 이전 결과인 2에 3을 더하는 것을 의미한다는 것을 이해할 수 있습니다.

메시지 관리를 위한 헬퍼 함수

대화 관리를 더 쉽게 하기 위해 헬퍼 함수를 만들 수 있습니다:

python
def add_user_message(messages, text):
    user_message = {
        "role": "user",
        "content": [
            {"text": text}
        ]
    }
    messages.append(user_message)

def add_assistant_message(messages, text):
    assistant_message = {
        "role": "assistant", 
        "content": [
            {"text": text}
        ]
    }
    messages.append(assistant_message)

def chat(messages):
    response = client.converse(
        modelId=model_id,
        messages=messages
    )
    return response["output"]["message"]["content"][0]["text"]

멀티턴 대화 구현하기

대화를 단계별로 구축하는 방법은 다음과 같습니다:

python
# 메시지의 시작 목록을 만듭니다
messages = []

# "1+1은 무엇인가요?"라는 초기 사용자 질문을 추가합니다
add_user_message(messages, "What's 1+1?")

# 답변을 얻기 위해 메시지 목록을 chat에 전달합니다
answer = chat(messages)

# 답변을 받아 assistant 메시지로 목록에 추가합니다
add_assistant_message(messages, answer)

# 사용자의 후속 질문을 추가합니다
add_user_message(messages, "And 3 more added to that?")

# 최종 답변을 얻기 위해 메시지 목록으로 chat을 다시 호출합니다
answer = chat(messages)
print(answer)

이 접근 방식은 Claude가 전체 컨텍스트를 가지고 적절하게 응답할 수 있도록 보장합니다: "1+1 = 2의 결과로 시작해서, 여기에 3을 더 더하면: 2 + 3 = 5가 됩니다"

메시지 역할 교대

메시지 목록을 구축할 때, 항상 메시지 역할이 올바르게 교대되도록 해야 합니다:

대화는 사용자 → 어시스턴트 → 사용자 → 어시스턴트 패턴을 따라야 합니다. 연속으로 두 개의 사용자 메시지나 두 개의 어시스턴트 메시지를 두지 마세요. 이 교대 패턴은 API에서 요구되며 자연스러운 대화 흐름을 반영합니다.

이 수동 메시지 관리가 처음에는 번거롭게 느껴질 수 있지만, 곧 익숙해질 것입니다. 이 패턴은 Claude와 대화 컨텍스트를 유지해야 하는 모든 애플리케이션을 구축하는 데 기본이 됩니다.