`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 구현을 참고하세요.

더 알아보기 (Learn more)