콘텐츠로 이동

컨텍스트 관리

컨텍스트는 과부하되어 쓰이는 용어입니다. 관심을 가질 수 있는 컨텍스트는 크게 두 가지가 있습니다:

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

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

Local context example
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.
}
if (require.main === module) {
main().catch(console.error);
}

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

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

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

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

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