컨텍스트 관리
컨텍스트는 과부하되어 쓰이는 용어입니다. 관심을 가질 수 있는 컨텍스트는 크게 두 가지가 있습니다:
- 실행 중 코드가 접근할 수 있는 로컬 컨텍스트: 도구에 필요한 의존성이나 데이터,
onHandoff
같은 콜백, 라이프사이클 훅 - 응답을 생성할 때 언어 모델이 볼 수 있는 에이전트/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.}
if (require.main === module) { main().catch(console.error);}
단일 실행에 참여하는 모든 에이전트, 도구, 훅은 동일한 type의 컨텍스트를 사용해야 합니다.
로컬 컨텍스트는 다음과 같은 용도로 사용하세요:
- 실행에 대한 데이터(사용자 이름, ID 등)
- 로거나 데이터 패처 같은 의존성
- 헬퍼 함수
에이전트/LLM 컨텍스트
섹션 제목: “에이전트/LLM 컨텍스트”LLM이 호출될 때 볼 수 있는 데이터는 대화 기록에서만 옵니다. 추가 정보를 제공하려면 다음 옵션이 있습니다:
- 에이전트
instructions
에 추가합니다 – 시스템 또는 개발자 메시지라고도 합니다. 컨텍스트를 받아 문자열을 반환하는 함수이거나 정적 문자열일 수 있습니다 Runner.run()
을 호출할 때input
에 포함합니다. instructions 방식과 유사하지만 메시지를 명령 체계에서 더 아래쪽에 배치할 수 있습니다- 함수 도구를 통해 노출하여 LLM이 필요 시 데이터를 가져올 수 있게 합니다
- 리트리벌 또는 웹 검색 도구를 사용해 파일, 데이터베이스, 웹의 관련 데이터에 근거한 응답을 생성합니다