아래는 GitHub API에서 가져온 큰 텍스트 데이터를 전처리하여 토큰 수를 계산하고, 지정한 토큰 제한 내에서 데이터를 청크로 나눈 후 각 청크별로 Claude API 호출(여기서는 모의 함수 사용) 및 결과 집계를 수행하는 간단한 예시입니다.
// 1. 토큰 수를 계산하는 간단한 함수
function countTokens(text) {
// 여기서는 공백 단위로 단어 수를 세는 간단한 방식 사용
return text.split(/\\s+/).length;
}
// 2. 지정한 최대 토큰 수(maxTokens)를 초과하지 않도록 데이터를 청크로 분할하는 함수
function splitIntoChunks(text, maxTokens) {
const words = text.split(/\\s+/);
const chunks = [];
let currentChunk = [];
words.forEach((word) => {
currentChunk.push(word);
if (currentChunk.length >= maxTokens) {
// 청크가 최대 토큰 수에 도달하면 청크를 저장하고 초기화
chunks.push(currentChunk.join(' '));
currentChunk = [];
}
});
// 남은 단어가 있다면 마지막 청크로 추가
if (currentChunk.length > 0) {
chunks.push(currentChunk.join(' '));
}
return chunks;
}
// 3. Claude API를 호출하는 모의 함수 (실제 API 호출 대신 1초 지연 후 간단한 요약 문자열 반환)
async function processChunkWithClaude(chunk) {
return new Promise((resolve) => {
setTimeout(() => {
// 실제 구현에서는 Claude API 호출 후 응답을 처리하게 됩니다.
resolve(`요약: ${chunk.substring(0, 30)}...`);
}, 1000);
});
}
// 4. 큰 데이터를 청크로 나누고 각 청크를 처리하는 메인 함수
async function processLargeData(data, maxTokensPerChunk = 100) {
const totalTokens = countTokens(data);
console.log(`전체 토큰 수: ${totalTokens}`);
let finalResult = '';
// 토큰 수가 제한보다 많으면 청크로 분할하여 처리
if (totalTokens > maxTokensPerChunk) {
console.log(`데이터를 최대 ${maxTokensPerChunk} 토큰 단위로 청크 분할합니다.`);
const chunks = splitIntoChunks(data, maxTokensPerChunk);
// 각 청크별로 Claude API 호출(여기서는 모의 처리)
const results = [];
for (const chunk of chunks) {
const result = await processChunkWithClaude(chunk);
results.push(result);
}
// 여러 청크의 결과를 집계 (여기서는 단순 개행으로 이어붙임)
finalResult = results.join('\\n');
} else {
// 데이터가 충분히 작으면 바로 처리
finalResult = await processChunkWithClaude(data);
}
return finalResult;
}
// 5. 예시 데이터 및 실행
const exampleText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "; // 간단한 예시 텍스트
// 예시 데이터를 여러 번 반복하여 큰 데이터를 생성
const largeData = Array(500).fill(exampleText).join(" ");
// 최대 토큰 제한을 50으로 설정하여 청크 분할 예시 실행
processLargeData(largeData, 50).then((summary) => {
console.log("최종 요약 결과:\\n", summary);
});
countTokens
함수는 텍스트를 공백으로 분리하여 단어 수(토큰 수)를 반환합니다.splitIntoChunks
함수는 입력 텍스트를 단어 단위로 분할한 후, 설정된 최대 토큰 수(maxTokens)마다 새로운 청크를 만들어 배열로 반환합니다.processChunkWithClaude
함수는 실제 Claude API 호출 대신, 1초 지연 후 청크의 앞부분을 요약한 문자열을 반환합니다. 실제 구현 시에는 여기서 Anthropic API를 호출하여 응답을 받아 처리할 수 있습니다.processLargeData
함수는 큰 데이터를 받아 전체 토큰 수를 확인한 후, 토큰 수가 제한보다 많으면 청크로 분할하고 각 청크를 별도로 처리한 후 결과를 집계합니다.이와 같이 전처리 단계에서 데이터를 청크로 나누어 처리하면, 한 번에 너무 많은 토큰을 Claude API에 전달하는 문제를 방지할 수 있습니다. 실제 프로젝트에서는 GitHub API로 데이터를 가져온 후 이 구조를 적용하여, 토큰 수를 미리 계산하고 청크 단위로 Claude API에 전달하는 로직을 구현하면 됩니다.