문제 요약
- 입력 데이터가 방대하면, API 호출 시마다 토큰을 많이 소모합니다.
- 대화 길이가 제한되므로 복잡한 사고를 진행하기 어렵습니다.
- 효율적인 데이터 관리 및 요약이 필요합니다.
해결 방안
1. 데이터 요약(Summarization)
방대한 데이터를 매번 입력하는 대신, 데이터를 핵심 정보로 요약하여 입력 토큰을 줄입니다.
예시: 요약 API 호출
# 요약 작업을 위한 프롬프트
prompt = f"다음 회계 데이터를 간단히 요약하세요:\n\n{large_data}"
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=500
)
summary = response.choices[0].text.strip()
print("요약된 데이터:", summary)
목적: 필요한 데이터의 요약본을 생성하여 이후 작업에서 활용.
장점: 입력 데이터의 크기를 줄여 효율적으로 대화 길이를 늘릴 수 있습니다.
2. 데이터의 단계별 로드
한 번에 방대한 데이터를 입력하지 말고, 필요한 부분만 단계적으로 로드합니다.
방법:
- 데이터를 여러 파일로 나눕니다.
- 현재 작업과 관련된 부분만 로드하여 사용합니다.
예시:
# 필요한 데이터만 로드
with open("section1_accounting.txt", "r", encoding="utf-8") as file:
data_part = file.read()
# 선택한 데이터만 API에 전달
response = openai.Completion.create(
engine="text-davinci-003",
prompt=f"다음 데이터를 기반으로 질문에 답하세요:\n\n{data_part}\n\n질문: 회계의 기본 개념은 무엇인가요?",
max_tokens=500
)
장점: 작업에 필요한 데이터만 전달하므로 토큰 소모를 줄임.
3. 벡터 데이터베이스 활용 (Embedding 기반 검색)
방대한 데이터셋을 저장하고, AI 모델에 적합한 정보만 검색해 입력으로 제공합니다.
과정:
- 데이터를 OpenAI의 Embedding API로 벡터화합니다.
- 벡터화된 데이터를 검색 가능한 데이터베이스에 저장합니다(예: Pinecone, Weaviate).
- 사용자 질문과 관련된 데이터만 검색하여 입력으로 사용합니다.
예시 (Embedding으로 검색):
# 데이터 임베딩 생성
embedding_response = openai.Embedding.create(
input="회계 주요 개념",
engine="text-embedding-ada-002"
)
# 벡터 데이터베이스에서 가장 유사한 데이터를 검색 후 API에 전달
relevant_data = "검색된 요약 데이터" # 검색된 데이터를 여기에 저장
response = openai.Completion.create(
engine="text-davinci-003",
prompt=f"다음 데이터를 기반으로 답하세요:\n\n{relevant_data}\n\n질문: 회계의 기본 개념은 무엇인가요?",
max_tokens=500
)
장점: 방대한 데이터를 모두 읽을 필요 없이, 질문과 관련된 정보만 전달. 입력 토큰을 효율적으로 사용 가능.
4. 컨텍스트 리셋과 메모리
긴 대화를 진행할 경우, 중간 결과물을 요약하여 새로운 컨텍스트로 시작합니다.
방법:
- 중간 단계에서 AI가 생성한 결과를 요약하거나 저장.
- 요약된 내용을 다음 호출의 컨텍스트로 사용.
예시:
# 중간 결과를 요약
mid_response = "중간 결과물"
summary_response = openai.Completion.create(
engine="text-davinci-003",
prompt=f"다음 내용을 간단히 요약하세요:\n\n{mid_response}",
max_tokens=200
)
summary = summary_response.choices[0].text.strip()
# 요약된 내용을 새로운 프롬프트에 사용
response = openai.Completion.create(
engine="text-davinci-003",
prompt=f"이전 요약을 바탕으로 추가 작업을 진행하세요:\n\n{summary}\n\n질문: 추가로 필요한 작업은 무엇인가요?",
max_tokens=500
)
장점: 대화 길이를 늘리면서 컨텍스트를 유지.
5. API 호출 전략 최적화
- 모델 선택: 방대한 데이터를 입력해야 한다면, 최대 토큰 수가 큰 모델(예: GPT-4 32k)을 선택.
- 효율적인 프롬프트 작성: 불필요한 문장이나 설명을 제거해 핵심 정보만 포함.
- 작업 나누기: 복잡한 작업을 여러 단계로 분리하여 각 호출이 간결해지도록 설계.
추천 워크플로우 (복합적 사고)
- 데이터 요약 및 정리: 방대한 데이터를 읽어야 할 경우, 먼저 요약본을 생성. 필요하다면 데이터를 주제별로 나눔.
- 정보 검색 및 로드: Embedding API를 활용해 필요한 데이터만 검색하거나 단계적으로 관련 데이터를 불러옴.
- 중간 결과 저장: 단계별로 나온 결과물을 저장 및 요약. 새로운 컨텍스트로 시작.
- 최종 작업 진행: 중간 요약을 바탕으로 최종 질문 또는 작업을 진행.
결론
방대한 데이터를 다룰 때 토큰 소모를 줄이고 대화를 길게 유지하려면:
- 요약(Summarization),
- 검색(Embedding 기반 검색),
- 컨텍스트 리셋 전략
을 활용하세요. 방대한 데이터를 반복적으로 읽는 대신, 필요한 정보를 효율적으로 검색하거나 요약된 데이터를 사용하는 것이 핵심입니다.
Tags:
AI