OpenAI의 GPT 모범 사례: 전략3. 복잡한 작업을 더 간단한 하위 작업들로 나누기 (Split complex tasks into simpler subtasks)

시작하기 전에 - GPT 모범 사례 문서 개요

image

OpenAI의 GPT 모범 사례 문서는 GPT 모델로부터 더 나은 답변을 얻기 위한 6가지 전략(starategy)들과 함께 각 전략별 세부 전술들을 소개하고 있습니다.

이 게시글은 그 중 두번째 전략인 참고 문헌 제공하기 (Provide reference text) 를 소개하겠습니다. :smiley:

전체 GPT 모범 사례에 대한 설명이 궁금하신 분들께서는 아래 목차를 참고해주세요!

https://platform.openai.com/docs/guides/gpt-best-practices/gpt-best-practices


전략 3: 복잡한 작업을 더 간단한 하위 작업들로 나누기 / Strategy: Split complex tasks into simpler subtasks

세부 전술: 인텐트(사용자의 의도) 분류를 사용하여 사용자 질의에 가장 관련성이 높은 지시문 식별하기 / Tactic: Use intent classification to identify the most relevant instructions for a user query

다양한 질의를 처리하기 위해 서로 다른 명령어 집합이 많이 필요한 경우에는 먼저 사용자 질의의 유형을 분류하고, 해당 분류를 처리하기 위해서 어떠한 명령어 집합이 필요한지를 정하는 것이 유용합니다. 정해진 카테고리들을 미리 정의하고, 각 카테고리마다 어떻게 처리할지를 하드코딩해두면 됩니다. 이 때, 하고자 하는 작업을 일련의 단계들로 쪼개고, 각 단계들에 재귀적으로 위 프로세스를 적용할 수 있습니다. 이러한 접근 방식의 장점은 각 질의마다 다음 단계를 실행하기 위해 필요한 세부적인 지침들만 실행하기 때문에, 단 하나의 질의를 사용하여 전체 작업들을 처리하는 것보다 에러가 줄어들 수 있다는 점입니다. 또한, 프롬프트가 클수록 실행에 더 많은 비용이 들기 때문에 비용 절감도 가능합니다. (가격 정보 참조).

For tasks in which lots of independent sets of instructions are needed to handle different cases, it can be beneficial to first classify the type of query and to use that classification to determine which instructions are needed. This can be achieved by defining fixed categories and hardcoding instructions that are relevant for handling tasks in a given category. This process can also be applied recursively to decompose a task into a sequence of stages. The advantage of this approach is that each query will contain only those instructions that are required to perform the next stage of a task which can result in lower error rates compared to using a single query to perform the whole task. This can also result in lower costs since larger prompts cost more to run (see pricing information).

예를 들어 고객 서비스 애플리케이션의 경우, 사용자 질의를 다음과 같이 유용하게 분류할 수 있다고 가정해 보겠습니다:

Suppose for example that for a customer service application, queries could be usefully classified as follows:

시스템 메시지(SYSTEM)
이제 고객 서비스 질의를 받게 될 것입니다. 입력된 각 질의를 기본 카테고리와 보조 카테고리로 분류하고, 답변을 json 형태로 제공할 때 각 카테고리들을 primary 및 secondary 키의 값으로 함께 제공해주세요.

기본 카테고리: 청구, 기술 지원, 계정 관리 또는 일반 문의.

청구 카테고리의 보조 카테고리들:
- 구독 취소 또는 업그레이드
- 결제 방법 추가
- 청구 설명
- 청구 이의 제기
기술 지원 카테고리의 보조 카테고리들:
- 문제 해결
- 장치 호환성
- 소프트웨어 업데이트
계정 관리 카테고리의 보조 카테고리들:
- 비밀번호 재설정
- 개인 정보 업데이트
- 계정 폐쇄
- 계정 보안
일반 문의 카테고리의 보조 카테고리들:
- 제품 정보
- 가격
- 피드백
- 담당자와 대화하기
> You will be provided with customer service queries. Classify each query into a primary category and a secondary category. Provide your output in json format with the keys: primary and secondary.
>
> Primary categories: Billing, Technical Support, Account Management, or General Inquiry.
>
> Billing secondary categories:
> - Unsubscribe or upgrade
> - Add a payment method
> - Explanation for charge
> - Dispute a charge
> Technical Support secondary categories:
> - Troubleshooting
> - Device compatibility
> - Software updates
> Account Management secondary categories:
> - Password reset
> - Update personal information
> - Close account
> - Account security
> General Inquiry secondary categories:
> - Product information
> - Pricing
> - Feedback
> - Speak to a human

사용자 메시지(USER)
인터넷이 다시 되게 해주세요.
> I need to get my internet working again.

위 대화를 실행해보기 / Open in Playground

고객 문의의 분류에 따라 다음 단계를 처리하기 위해 GPT 모델에 보다 구체적인 일련의 지침을 제공할 수 있습니다. 예를 들어 고객이 '문제 해결'에 대한 도움이 필요하다고 가정해 보겠습니다.

Based on the classification of the customer query, a set of more specific instructions can be provided to a GPT model to handle next steps. For example, suppose the customer requires help with "troubleshooting".

시스템 메시지(SYSTEM)
기술 지원 맥락에서 문제 해결이 필요한 고객 서비스 문의가 제공됩니다. 다음과 같이 사용자를 도와주세요:
- 라우터에 연결되는 모든 케이블이 연결되어 있는지 확인하도록 요청합니다. 시간이 지나면 케이블이 느슨해지는 것이 일반적입니다.
- 모든 케이블이 연결되었는데도 문제가 지속되면 사용 중인 라우터 모델을 물어봅니다.
- 아래 내용을 참고하여 장비를 어떻게 재시작하는지 알려주세요:
-- 모델 번호가 MTD-327J인 경우, 빨간색 버튼을 5초간 누른 다음 5분간 기다렸다가 연결을 테스트하라고 조언합니다.
-- 모델 번호가 MTD-327S인 경우, 플러그를 뽑았다가 다시 꽂은 다음 5분간 기다렸다가 연결을 테스트하도록 안내합니다.
- 장치를 다시 시작하고 5분을 기다린 후에도 고객의 문제가 지속되면 {"IT 지원 요청됨"}을 출력하여 IT 지원팀에 연결합니다.
- 사용자가 이 주제와 관련이 없는 질문을 시작하면 문제 해결에 대한 현재 채팅을 종료할 것인지 확인하고 다음 체계에 따라 요청을 분류해주세요:
<위의 기본/보조 분류 체계를 여기에 작성해주세요>
> You will be provided with customer service inquiries that require troubleshooting in a technical support context. Help the user by:
> - Ask them to check that all cables to/from the router are connected. Note that it is common for cables to come loose over time.
> - If all cables are connected and the issue persists, ask them which router model they are using
> - Now you will advise them how to restart their device:
> -- If the model number is MTD-327J, advise them to push the red button and hold it for 5 seconds, then wait 5 minutes before testing the connection.
> -- If the model number is MTD-327S, advise them to unplug and replug it, then wait 5 minutes before testing the connection.
> - If the customer's issue persists after restarting the device and waiting 5 minutes, connect them to IT support by outputting {"IT support requested"}.
> - If the user starts asking questions that are unrelated to this topic then confirm if they would like to end the current chat about troubleshooting and classify their request according to the following scheme:
> <insert primary/secondary classification scheme from above here>

사용자 메시지(USER)
인터넷에 다시 연결되게 해주세요.
> I need to get my internet working again.

위 대화를 실행해보기 / Open in Playground

모델에 대화 상태가 변경될 때를 나타내는 특수 문자열을 내보내도록 지시한 것을 확인할 수 있습니다. 이를 통해 시스템을 상태에 따라 주입되는 명령어가 결정되는 상태 머신으로 전환할 수 있습니다. 상태, 해당 상태와 관련된 명령어, 그리고 선택적으로 해당 상태에서 어떤 상태 전환이 허용되는지를 추적함으로써 덜 구조화된 접근 방식으로는 달성하기 어려운 사용자 경험에 가드레일을 설치할 수 있습니다.

Notice that the model has been instructed to emit special strings to indicate when the state of the conversation changes. This enables us to turn our system into a state machine where the state determines which instructions are injected. By keeping track of state, what instructions are relevant at that state, and also optionally what state transitions are allowed from that state, we can put guardrails around the user experience that would be hard to achieve with a less structured approach.

세부 전술: 매우 긴 대화가 필요한 대화 애플리케이션의 경우 이전 대화를 요약하거나 필터링하기 / Tactic: For dialogue applications that require very long conversations, summarize or filter previous dialogue

GPT 모델은 (입력) 컨텍스트 길이가 고정되어 있기 때문에, 전체 대화가 컨텍스트에 포함되는 사용자와 어시스턴트 간의 대화를 무한정 계속할 수 없습니다.

Since GPTs have a fixed context length, dialogue between a user and an assistant in which the entire conversation is included in the context window cannot continue indefinitely.

이 문제를 해결하는 방법에는 여러 가지가 있는데, 그 중 하나는 이전 대화들을 요약하는 것입니다. 입력의 크기가 미리 정해진 임계값 길이에 도달하면 대화의 일부를 요약하는 질의를 실행하여 이전 대화의 요약을 시스템 메시지의 일부로 포함시킵니다. 또는, 전체 대화에 걸쳐 백그라운드에서 비동기적으로 이전 대화를 요약할 수도 있습니다.

There are various workarounds to this problem, one of which is to summarize previous turns in the conversation. Once the size of the input reaches a predetermined threshold length, this could trigger a query that summarizes part of the conversation and the summary of the prior conversation could be included as part of the system message. Alternatively, prior conversation could be summarized asynchronously in the background throughout the entire conversation.

또 다른 해결책은 현재 질의와 가장 관련성이 높은 대화의 이전 부분을 동적으로 선택하는 것입니다. "임베딩 기반 검색을 사용하여 효율적인 지식 검색 구현하기" 전략을 참조하세요.

An alternative solution is to dynamically select previous parts of the conversation that are most relevant to the current query. See the tactic "Use embeddings-based search to implement efficient knowledge retrieval".

세부 전술: 긴 문서를 조각별로 요약하고, 다시 조각들을 모아서 전체 내용 요약하기 / Tactic: Summarize long documents piecewise and construct a full summary recursively

GPT 모델은 컨텍스트 길이가 고정되어 있어, 원본 문서의 길이와 이를 요약한 요약문의 길이의 합이 컨텍스트 길이보다 긴 경우 사용할 수 없습니다. (원본 문서의 길이 + 요약의 길이 > 컨텍스트 길이인 경우)

Since GPTs have a fixed context length, they cannot be used to summarize a text longer than the context length minus the length of the generated summary in a single query.

책과 같이 매우 긴 문서를 요약하려면 일련의 질의들을 사용하여 문서의 각 섹션을 요약할 수 있습니다. 섹션 요약을 연결하고 요약하여, 요약들에 대한 요약을 다시 생성할 수 있습니다. 이 프로세스는 전체 문서가 요약될 때까지 재귀적으로 진행될 수 있습니다. 이후 섹션을 이해하기 위해 이전 섹션에 대한 정보를 사용해야 하는 경우에는 해당 시점의 콘텐츠를 요약하면서 책의 특정 지점 앞에 있는 텍스트의 실행 요약을 포함하는 것이 유용할 수 있습니다. 책을 요약하는 이 절차의 효과는 이전 연구에서 OpenAI가 GPT-3의 변형을 사용하여 연구한 바 있습니다.

To summarize a very long document such as a book we can use a sequence of queries to summarize each section of the document. Section summaries can be concatenated and summarized producing summaries of summaries. This process can proceed recursively until an entire document is summarized. If it’s necessary to use information about earlier sections in order to make sense of later sections, then a further trick that can be useful is to include a running summary of the text that precedes any given point in the book while summarizing content at that point. The effectiveness of this procedure for summarizing books has been studied in previous research by OpenAI using variants of GPT-3.