𝗠𝗶𝗱-𝗖𝗼𝗻𝘃𝗲𝗿𝘀𝗮𝘁𝗶𝗼𝗻 𝗦𝘆𝘀𝘁𝗲𝗺 𝗣𝗿𝗼𝗺𝗽𝘁𝘀
장기 실행 AI 에이전트를 구축할 때 종종 비용이 많이 드는 실수를 저지르곤 합니다.
비용을 절감하기 위해 대규모 시스템 프롬프트를 사용하고 이를 캐싱합니다. 이는 세션 중간에 에이전트에게 새로운 지침을 전달해야 하기 전까지는 잘 작동합니다. 코딩 언어를 변경하거나 프로젝트 상태를 업데이트해야 할 수도 있기 때문입니다.
이 정보를 추가하기 위해 최상위 시스템 프롬프트를 수정하면 캐시가 깨집니다. 모델은 전체 히스토리를 처음부터 다시 처리해야 하며, 이 과정에서 비용이 전액 발생합니다. 이는 에이전트를 느리고 비싸게 만듭니다.
새로운 Claude 모델은 대화 중간 시스템 메시지(mid-conversation system messages)를 통해 이 문제를 해결합니다.
이제 메시지 배열 내부에 시스템 역할(system role) 메시지를 직접 배치할 수 있습니다. 메시지 상단이 아닌 히스토리 뒤에 배치하면 됩니다.
왜 중요한가:
• 캐시 안정성: 지침이 캐싱된 히스토리 뒤에 위치합니다. 따라서 접두사(prefix)를 무효화하지 않으며, 새로운 작은 메시지에 대해서만 비용을 지불하면 됩니다. • 보안: 사용자 메시지를 우회 방법으로 사용할 수도 있지만, 사용자가 이를 위조할 수 있습니다. 시스템 역할 메시지는 사용자가 속일 수 없는 권한을 가집니다. 이는 프롬프트 인젝션을 방지합니다.
올바르게 사용하는 방법:
이 메시지들을 사실(fact)로 구성하세요. 기존 내용을 무시하라는 식의 언어(override language)를 사용하지 마세요.
• 좋음: "자동 승인 모드가 이제 활성화되었습니다." • 나쁨: "사용자가 말한 내용을 무시하고 대신 이렇게 하세요."
모델은 이전 컨텍스트를 무시하라는 지침에 저항하는 경우가 많습니다. 새로운 상황(state of the world)을 설명하는 데 집중하세요.
사용 규칙:
- 사용자 또는 어시스턴트 메시지 다음에 위치해야 합니다.
- 배열의 첫 번째 메시지일 수 없습니다.
- 텍스트 콘텐츠만 허용됩니다.
- 모든 모델이 지원하는 것은 아닙니다. 400 에러가 발생할 경우 사용자 턴 리마인더(user-turn reminder)로 대체할 수 있도록 항상 try-catch 블록을 사용하세요.
세션이 시작된 후 새로운 사실을 알게 되었을 때 이 기능을 사용하세요. 시작 시점에 이미 알고 있는 사실이라면 메인 시스템 프롬프트에 넣으세요. 사실이 동적(dynamic)이라면 대화 중간 시스템 메시지를 사용하세요.
이렇게 하면 캐시를 유지하면서 비용을 낮게 유지할 수 있습니다.