Azure OpenAI에서 텍스트 완성으로 작업하기
GPT-35-Turbo 및 GPT-4 모델은 대화형 인터페이스에 최적화된 언어 모델입니다. 모델의 동작은 이전 GPT-3 모델과 다릅니다. 이전 모델은 텍스트 입력 및 텍스트 출력이었습니다. 즉, 방금 배운 대로 프롬프트 문자열을 수락하고 프롬프트에 추가하기 위해 완성을 반환했습니다.
그러나 GPT-35-Turbo 및 GPT-4 모델은 대화 입력 및 메시지 출력입니다. 모델은 특정 채팅과 유사한 대화 내용 형식으로 형식화된 입력을 예상하고 채팅에서 모델 작성 메시지를 나타내는 완료를 반환합니다.
GPT-35-Turbo 및 GPT-4는 여전히 텍스트 완성을 수락하고 생성할 수 있지만, 이들이 빛나는 곳은 채팅입니다.
Azure OpenAI에는 이러한 유형의 모델과 상호 작용하기 위한 다음 두 가지 옵션이 있습니다.
- 채팅 완료 API.
- ChatML(Chat Markup Language)을 사용한 완료 API입니다.
채팅 완성 API는 GPT-35-Turbo 및 GPT-4 모델과 상호 작용하기 위한 새로운 전용 API이며 여기서 사용할 것입니다.
채팅 완성 API 역할 이해
OpenAI는 대화형식의 입력을 허용하도록 GPT-35-Turbo 및 GPT-4 모델을 학습했습니다. 모델에 전송된 모든 입력 또는 프롬프트와 모델에서 반환된 모든 응답은 채팅 완성 API의 전체 대화에 추가됩니다.
채팅 완성 API는 들어오는 프롬프트 및 나가는 응답을 메시지로 나타냅니다.
모델은 역할별로 구성된 대화가 있는 메시지 개체의 배열을 허용합니다. 역할 유형에는 시스템, 사용자 및 도우미의 세 가지 유형이 있습니다.
시스템 역할
시스템 메시지라고도 하는 시스템 역할은 배열의 시작 부분에 포함됩니다. 이 메시지는 모델에 초기 지침을 제공합니다. 시스템 역할에 다음을 포함한 다양한 정보를 제공할 수 있습니다.
- 도우미에 대한 간략한 설명
- 도우미의 성격 특성
- 도우미가 따라야 할 지침 또는 규칙
- 모델에 필요한 데이터 또는 정보(예: FAQ의 관련 질문)
사용 사례에 맞게 시스템 역할을 사용자 지정하거나 기본 지침만 포함할 수 있습니다. 시스템 역할/메시지는 선택 사항이지만 최상의 결과를 얻으려면 적어도 기본 역할을 포함하는 것이 좋습니다.
사용자 및 도우미 역할
대화는 사용자와 도우미 간에 발생합니다. 사용자는 프롬프트를 입력하고 모델과 상호 작용하는 사람입니다. 모델의 응답은 시스템 역할로 표시됩니다.
사용자가 모델에 보내는 메시지는 최고 품질의 응답을 얻기 위해 프롬프트를 디자인하기 위한 모범 사례를 따라야 합니다.
메시지 프롬프트 예
다음은 GPT-35-Turbo 및 GPT-4 모델에서 사용할 수 있는 다양한 스타일의 프롬프트의 몇 가지 예입니다. 이러한 예제는 시작에 불과하며 다양한 프롬프트를 실험하여 동작을 사용자 지정할 수 있습니다.
기본 예제
GPT-35-Turbo 모델이 chat.openai.com과 유사하게 작동하도록 하려면 “도우미는 OpenAI에서 학습한 대규모 언어 모델입니다”와 같은 기본 시스템 메시지를 사용하면 됩니다.
다음 단원에서 채팅 완성 API의 .NET SDK를 사용하는 방법을 알아보겠습니다. 지금은 변수 이름을 예로 들어 보겠습니다.
string systemMessage = "Assistant is a large language model trained by OpenAI";
string userMessage = "Who were the founders of Microsoft?";
지침이 포함된 예
일부 시나리오에서는 모델에 추가 지침을 제공하여 모델이 수행할 수 있는 작업에 대한 가드레일을 정의할 수 있습니다.
string systemMessage = """
Assistant is an intelligent chatbot designed to help users answer their tax related questions.
Instructions:
- Only answer questions related to taxes.
- If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information.
""";
string userMessage = "When are my taxes due?";
대화 관리
모델에는 메모리가 없으므로 모든 질문과 답변이 포함된 새로운 질문마다 업데이트된 성적표가 필요합니다. 그렇지 않으면 컨텍스트가 손실됩니다.
즉, 모델과 상호 작용할 때마다 업데이트된 전체 대화를 모델에 보내야 하며 각 모델에 대한 토큰 제한에 쉽게 도달할 수 있습니다.
gpt-35-turbo
의 토큰 한도는 4,096개인 반면 gpt-4
및 gpt-4-32k
의 토큰 한도는 각각 8,192개와 32,768개입니다. 이 한도 이하로 유지해야 하며 그러지 않으면 오류가 발생합니다.
토큰 수를 추적하고 모델에 전송된 배열에서 가장 오래된 메시지를 제거할 수 있습니다. 항상 시스템 메시지를 유지하고 도우미 또는 사용자 메시지만 제거하는 것이 가장 좋습니다. 그러나 시간이 지남에 따라 이러한 대화 관리 방법은 대화의 이전 부분의 맥락이 손실됨에 따라 대화 품질이 저하될 수 있습니다.
또는 토큰 제한에 도달하면 사용자에게 새 대화를 시작하라는 메시지를 표시할 수 있습니다.