𝗠𝗶𝗱-𝗖𝗼𝗻𝘃𝗲𝗿𝘀𝗮𝘁𝗶𝗼𝗻 𝗦𝘆𝘀𝘁𝗲𝗺 𝗣𝗿𝗼𝗺𝗽𝘁𝘀

장기 실행 AI 에이전트를 구축할 때 종종 비용이 많이 드는 실수를 저지르곤 합니다.

비용을 절감하기 위해 대규모 시스템 프롬프트를 사용하고 이를 캐싱합니다. 이는 세션 중간에 에이전트에게 새로운 지침을 전달해야 하기 전까지는 잘 작동합니다. 코딩 언어를 변경하거나 프로젝트 상태를 업데이트해야 할 수도 있기 때문입니다.

이 정보를 추가하기 위해 최상위 시스템 프롬프트를 수정하면 캐시가 깨집니다. 모델은 전체 히스토리를 처음부터 다시 처리해야 하며, 이 과정에서 비용이 전액 발생합니다. 이는 에이전트를 느리고 비싸게 만듭니다.

새로운 Claude 모델은 대화 중간 시스템 메시지(mid-conversation system messages)를 통해 이 문제를 해결합니다.

이제 메시지 배열 내부에 시스템 역할(system role) 메시지를 직접 배치할 수 있습니다. 메시지 상단이 아닌 히스토리 뒤에 배치하면 됩니다.

왜 중요한가:

• 캐시 안정성: 지침이 캐싱된 히스토리 뒤에 위치합니다. 따라서 접두사(prefix)를 무효화하지 않으며, 새로운 작은 메시지에 대해서만 비용을 지불하면 됩니다. • 보안: 사용자 메시지를 우회 방법으로 사용할 수도 있지만, 사용자가 이를 위조할 수 있습니다. 시스템 역할 메시지는 사용자가 속일 수 없는 권한을 가집니다. 이는 프롬프트 인젝션을 방지합니다.

올바르게 사용하는 방법:

이 메시지들을 사실(fact)로 구성하세요. 기존 내용을 무시하라는 식의 언어(override language)를 사용하지 마세요.

• 좋음: "자동 승인 모드가 이제 활성화되었습니다." • 나쁨: "사용자가 말한 내용을 무시하고 대신 이렇게 하세요."

모델은 이전 컨텍스트를 무시하라는 지침에 저항하는 경우가 많습니다. 새로운 상황(state of the world)을 설명하는 데 집중하세요.

사용 규칙:

세션이 시작된 후 새로운 사실을 알게 되었을 때 이 기능을 사용하세요. 시작 시점에 이미 알고 있는 사실이라면 메인 시스템 프롬프트에 넣으세요. 사실이 동적(dynamic)이라면 대화 중간 시스템 메시지를 사용하세요.

이렇게 하면 캐시를 유지하면서 비용을 낮게 유지할 수 있습니다.

Source: https://dev.to/pavelespitia/mid-conversation-system-prompts-steering-an-agent-without-breaking-the-cache-2kd3