콘텐츠로 이동

컨텍스트 관리

컨텍스트는 여러 의미로 사용됩니다. 관심을 가질 수 있는 컨텍스트에는 두 가지 주요 범주가 있습니다:

  1. 실행 중에 코드가 액세스할 수 있는 로컬 컨텍스트: 도구에 필요한 의존성 또는 데이터, onHandoff 같은 콜백, 그리고 라이프사이클 훅
  2. 응답을 생성할 때 언어 모델이 볼 수 있는 에이전트/LLM 컨텍스트

로컬 컨텍스트는 RunContext<T> 타입으로 표현됩니다. 상태나 의존성을 담을 임의의 객체를 생성해 Runner.run()에 전달합니다. 모든 도구 호출과 훅은 RunContext 래퍼를 받아 그 객체를 읽거나 수정할 수 있습니다.

로컬 컨텍스트 예제
import { Agent, run, RunContext, tool } from '@openai/agents';
import { z } from 'zod';
interface UserInfo {
name: string;
uid: number;
}
const fetchUserAge = tool({
name: 'fetch_user_age',
description: 'Return the age of the current user',
parameters: z.object({}),
execute: async (
_args,
runContext?: RunContext<UserInfo>,
): Promise<string> => {
return `User ${runContext?.context.name} is 47 years old`;
},
});
async function main() {
const userInfo: UserInfo = { name: 'John', uid: 123 };
const agent = new Agent<UserInfo>({
name: 'Assistant',
tools: [fetchUserAge],
});
const result = await run(agent, 'What is the age of the user?', {
context: userInfo,
});
console.log(result.finalOutput);
// The user John is 47 years old.
}
main().catch((error) => {
console.error(error);
process.exit(1);
});

단일 실행에 참여하는 모든 에이전트, 도구, 훅은 동일한 type의 컨텍스트를 사용해야 합니다.

로컬 컨텍스트는 다음과 같은 용도로 사용하세요:

  • 실행에 대한 데이터(사용자 이름, ID 등)
  • 로거나 데이터 페처 같은 의존성
  • 헬퍼 함수

LLM이 호출될 때 볼 수 있는 데이터는 대화 기록에서만 옵니다. 추가 정보를 제공하려면 다음 옵션이 있습니다:

  1. 에이전트 instructions에 추가 – 시스템 또는 개발자 메시지라고도 합니다. 정적 문자열이거나 컨텍스트를 받아 문자열을 반환하는 함수가 될 수 있습니다
  2. Runner.run()을 호출할 때 input에 포함. instructions 기법과 유사하지만 메시지를 명령 체계에서 더 아래에 배치할 수 있습니다
  3. 함수 도구를 통해 노출하여 LLM이 온디맨드로 데이터를 가져올 수 있게 합니다
  4. 검색 또는 웹 검색 도구를 사용해 파일, 데이터베이스, 웹의 관련 데이터에 기반하여 응답을 보강합니다