`pruneMessages()`
pruneMessages()
pruneMessages 함수는 ModelMessage 객체 배열을 가지치기(prune)하거나 필터링하는 데 사용해요. 메시지 컨텍스트를 줄여(토큰 절약) 중간 reasoning을 제거하거나, LLM에 보내기 전에 툴 호출과 빈 메시지를 다듬는 데 유용해요.
출처: 문서
본문
pruneMessages는 ModelMessage 객체 배열을 가지치기(prune)하거나 필터링하는 함수예요. 이 함수는 메시지 컨텍스트를 줄여 토큰을 절약하고, 중간 reasoning을 제거하거나, LLM에 보내기 전에 툴 호출과 빈 메시지를 다듬는 데 유용해요.
import {
createUIMessageStreamResponse,
pruneMessages,
streamText,
toUIMessageStream,
} from 'ai';
__PROVIDER_IMPORT__;
export async function POST(req: Request) {
const { messages } = await req.json();
const prunedMessages = pruneMessages({
messages,
reasoning: 'before-last-message',
toolCalls: 'before-last-2-messages',
emptyMessages: 'remove',
});
const result = streamText({
model: __MODEL__,
messages: prunedMessages,
});
return createUIMessageStreamResponse({
stream: toUIMessageStream({ stream: result.stream }),
});
}
Import
import { pruneMessages } from "ai"
API 시그니처 (API Signature)
매개변수 (Parameters)
| 이름 | 타입 | 설명 |
|---|---|---|
messages |
ModelMessage[] |
가지치기할 ModelMessage 객체 배열이에요. |
reasoning |
'all' | 'before-last-message' | 'none' |
어시스턴트 메시지에서 reasoning 콘텐츠를 어떻게 제거할지예요. 기본값: "none". |
toolCalls |
'all' | 'before-last-message' | 'before-last-${number}-messages' | 'none' | Array<{ type: 'all' | 'before-last-message' | 'before-last-${number}-messages'; tools?: string[] }> |
툴 호출/결과/승인 콘텐츠를 어떻게 가지치기할지예요. 전략 문자열이나 툴별 세밀한 제어를 위한 배열을 지정할 수 있어요. 기본값: [] (빈 배열, "none"과 동일). |
emptyMessages |
'keep' | 'remove' |
가지치기 후 내용이 비어 있는 메시지를 유지할지 제거할지예요. 기본값: "remove". |
반환값 (Returns)
제공된 옵션에 따라 가지치기된 ModelMessage 객체 배열을 반환해요.
예제 사용법 (Example Usage)
import { pruneMessages } from 'ai';
const pruned = pruneMessages({
messages,
reasoning: 'all', // Remove all reasoning parts
toolCalls: 'before-last-message', // Remove tool calls except those in the last message
});
가지치기 옵션 (Pruning Options)
- reasoning: 어시스턴트 메시지에서 reasoning 부분을 제거해요.
'all'로 모두 제거하고,'before-last-message'로 마지막 메시지의 reasoning은 유지하며,'none'으로 모든 reasoning을 유지할 수 있어요. - toolCalls: 어시스턴트/툴 메시지에서 툴 호출, 툴 결과, 툴 승인 chunk를 가지치기해요. 기본값은 빈 배열(가지치기 안 함)이에요. 옵션은 다음과 같아요:
'all': 해당 콘텐츠를 모두 제거해요.'before-last-message': 마지막 메시지를 제외하고 제거해요.'before-last-N-messages': 마지막 N개 메시지를 제외하고 제거해요.'none': 가지치기하지 않아요.- 또는 툴별 세밀한 제어를 위한 배열을 제공할 수 있어요. 예:
[{ type: 'before-last-message', tools: ['search', 'calculator'] }]로 특정 툴만 가지치기해요.
- emptyMessages: 가지치기 후 내용이 없는 메시지를 제외하려면
'remove'(기본값)로 설정해요.
팁:
pruneMessages는 일반적으로 툴 호출과 승인이 여러 번 이뤄진 뒤, 컨텍스트 윈도우를 LLM에 보내기 전에 메시지/토큰 수를 줄이기 위해 사용해요.
고급 사용법과 가능한 모든 메시지 부분 목록은 ModelMessage 문서와 pruneMessages 구현을 참고하세요.