|
| 1 | +--- |
| 2 | +title: 에이전트 |
| 3 | +description: Learn more about how to define agents in the OpenAI Agents SDK for JavaScript / TypeScript |
| 4 | +--- |
| 5 | + |
| 6 | +import { Code } from '@astrojs/starlight/components'; |
| 7 | +import simpleAgent from '../../../../../../examples/docs/agents/simpleAgent.ts?raw'; |
| 8 | +import agentWithTools from '../../../../../../examples/docs/agents/agentWithTools.ts?raw'; |
| 9 | +import agentWithContext from '../../../../../../examples/docs/agents/agentWithContext.ts?raw'; |
| 10 | +import agentWithAodOutputType from '../../../../../../examples/docs/agents/agentWithAodOutputType.ts?raw'; |
| 11 | +import agentWithHandoffs from '../../../../../../examples/docs/agents/agentWithHandoffs.ts?raw'; |
| 12 | +import agentWithDynamicInstructions from '../../../../../../examples/docs/agents/agentWithDynamicInstructions.ts?raw'; |
| 13 | +import agentWithLifecycleHooks from '../../../../../../examples/docs/agents/agentWithLifecycleHooks.ts?raw'; |
| 14 | +import agentCloning from '../../../../../../examples/docs/agents/agentCloning.ts?raw'; |
| 15 | +import agentForcingToolUse from '../../../../../../examples/docs/agents/agentForcingToolUse.ts?raw'; |
| 16 | + |
| 17 | +에이전트는 OpenAI Agents SDK의 기본 구성 요소입니다. **에이전트**는 다음으로 구성된 대규모 언어 모델(LLM)입니다: |
| 18 | + |
| 19 | +- **Instructions** – 모델에게 _자신이 누구인지_ 와 _어떻게 응답해야 하는지_ 알려주는 시스템 프롬프트 |
| 20 | +- **Model** – 호출할 OpenAI 모델과 선택적 모델 튜닝 매개변수 |
| 21 | +- **Tools** – 작업을 수행하기 위해 LLM이 호출할 수 있는 함수 또는 API 목록 |
| 22 | + |
| 23 | +<Code lang="typescript" code={simpleAgent} title="기본 에이전트 정의" /> |
| 24 | + |
| 25 | +이 페이지의 나머지 부분에서는 모든 에이전트 기능을 자세히 설명합니다. |
| 26 | + |
| 27 | +--- |
| 28 | + |
| 29 | +## 기본 구성 |
| 30 | + |
| 31 | +`Agent` 생성자는 단일 구성 객체를 받습니다. 가장 자주 사용하는 속성은 다음과 같습니다. |
| 32 | + |
| 33 | +| 속성 | 필수 | 설명 | |
| 34 | +| --------------- | ------ | -------------------------------------------------------------------------------------------------- | |
| 35 | +| `name` | 예 | 짧고 사람이 읽을 수 있는 식별자 | |
| 36 | +| `instructions` | 예 | 시스템 프롬프트(문자열 **또는** 함수 – [Dynamic instructions](#dynamic-instructions) 참조) | |
| 37 | +| `model` | 아니오 | 모델 이름 **또는** 사용자 정의 [`Model`](/openai-agents-js/openai/agents/interfaces/model/) 구현 | |
| 38 | +| `modelSettings` | 아니오 | 튜닝 매개변수(temperature, top_p, 등) | |
| 39 | +| `tools` | 아니오 | 모델이 호출할 수 있는 [`Tool`](/openai-agents-js/openai/agents/type-aliases/tool/) 인스턴스의 배열 | |
| 40 | + |
| 41 | +<Code lang="typescript" code={agentWithTools} title="도구가 있는 에이전트" /> |
| 42 | + |
| 43 | +--- |
| 44 | + |
| 45 | +## 컨텍스트 |
| 46 | + |
| 47 | +에이전트는 **컨텍스트 타입에 대해 제네릭**입니다 – 즉, `Agent<TContext, TOutput>`. _컨텍스트_ 는 여러분이 생성해 `Runner.run()`에 전달하는 의존성 주입 객체입니다. 이는 모든 도구, 가드레일, 핸드오프 등으로 전달되며 상태를 저장하거나 공유 서비스(데이터베이스 연결, 사용자 메타데이터, 기능 플래그 등)를 제공하는 데 유용합니다. |
| 48 | + |
| 49 | +<Code |
| 50 | + lang="typescript" |
| 51 | + code={agentWithContext} |
| 52 | + title="컨텍스트가 있는 에이전트" |
| 53 | +/> |
| 54 | + |
| 55 | +--- |
| 56 | + |
| 57 | +## 출력 타입 |
| 58 | + |
| 59 | +기본적으로 에이전트는 **일반 텍스트**(`string`)를 반환합니다. 모델이 구조화된 객체를 반환하도록 하려면 `outputType` 속성을 지정하면 됩니다. SDK는 다음을 허용합니다: |
| 60 | + |
| 61 | +1. [Zod](https://github.com/colinhacks/zod) 스키마(`z.object({...})`) |
| 62 | +2. JSON‑schema와 호환되는 임의의 객체 |
| 63 | + |
| 64 | +<Code |
| 65 | + lang="typescript" |
| 66 | + code={agentWithAodOutputType} |
| 67 | + title="Zod를 사용한 구조화된 출력" |
| 68 | +/> |
| 69 | + |
| 70 | +`outputType`이 제공되면 SDK는 일반 텍스트 대신 자동으로 |
| 71 | +[structured outputs](https://platform.openai.com/docs/guides/structured-outputs)를 사용합니다. |
| 72 | + |
| 73 | +--- |
| 74 | + |
| 75 | +## 핸드오프 |
| 76 | + |
| 77 | +에이전트는 `handoffs` 속성을 통해 다른 에이전트에 **위임**할 수 있습니다. 일반적인 패턴은 대화를 보다 전문화된 하위 에이전트로 라우팅하는 _분류 에이전트(트리아지 에이전트)_ 를 사용하는 것입니다. |
| 78 | + |
| 79 | +<Code |
| 80 | + lang="typescript" |
| 81 | + code={agentWithHandoffs} |
| 82 | + title="핸드오프가 있는 에이전트" |
| 83 | +/> |
| 84 | + |
| 85 | +이 패턴에 대한 자세한 내용은 [Handoffs](/openai-agents-js/ko/guides/handoffs)에서 확인할 수 있습니다. |
| 86 | + |
| 87 | +--- |
| 88 | + |
| 89 | +## 동적 instructions |
| 90 | + |
| 91 | +`instructions`는 문자열 대신 **함수**가 될 수 있습니다. 이 함수는 현재 `RunContext`와 에이전트 인스턴스를 받아 문자열 _또는_ `Promise<string>`을 반환할 수 있습니다. |
| 92 | + |
| 93 | +<Code |
| 94 | + lang="typescript" |
| 95 | + code={agentWithDynamicInstructions} |
| 96 | + title="동적 instructions가 있는 에이전트" |
| 97 | +/> |
| 98 | + |
| 99 | +동기 및 `async` 함수 모두 지원됩니다. |
| 100 | + |
| 101 | +--- |
| 102 | + |
| 103 | +## 수명 주기 후크 |
| 104 | + |
| 105 | +고급 사용 사례의 경우 이벤트를 리스닝하여 에이전트 수명 주기를 관찰할 수 있습니다 |
| 106 | + |
| 107 | +<Code |
| 108 | + lang="typescript" |
| 109 | + code={agentWithLifecycleHooks} |
| 110 | + title="수명 주기 후크가 있는 에이전트" |
| 111 | +/> |
| 112 | + |
| 113 | +--- |
| 114 | + |
| 115 | +## 가드레일 |
| 116 | + |
| 117 | +가드레일을 사용하면 사용자 입력과 에이전트 출력을 검증하거나 변환할 수 있습니다. 이는 `inputGuardrails` 및 `outputGuardrails` 배열을 통해 구성합니다. 자세한 내용은 [Guardrails](/openai-agents-js/ko/guides/guardrails)를 참조하세요. |
| 118 | + |
| 119 | +--- |
| 120 | + |
| 121 | +## 에이전트 복제/복사 |
| 122 | + |
| 123 | +기존 에이전트의 약간 수정된 버전이 필요하신가요? 완전히 새로운 `Agent` 인스턴스를 반환하는 `clone()` 메서드를 사용하세요. |
| 124 | + |
| 125 | +<Code lang="typescript" code={agentCloning} title="에이전트 복제" /> |
| 126 | + |
| 127 | +--- |
| 128 | + |
| 129 | +## 도구 사용 강제 |
| 130 | + |
| 131 | +도구를 제공해도 LLM이 반드시 호출하는 것은 아닙니다. `modelSettings.tool_choice`로 도구 사용을 **강제**할 수 있습니다: |
| 132 | + |
| 133 | +1. `'auto'`(기본값) – LLM이 도구 사용 여부를 결정 |
| 134 | +2. `'required'` – LLM이 반드시 도구를 호출해야 함(어떤 도구를 쓸지는 선택 가능) |
| 135 | +3. `'none'` – LLM은 도구를 **호출하면 안 됨** |
| 136 | +4. 특정 도구 이름(예: `'calculator'`) – LLM은 해당 도구를 반드시 호출해야 함 |
| 137 | + |
| 138 | +<Code lang="typescript" code={agentForcingToolUse} title="도구 사용 강제" /> |
| 139 | + |
| 140 | +### 무한 루프 방지 |
| 141 | + |
| 142 | +도구 호출 후 SDK는 자동으로 `tool_choice`를 `'auto'`로 재설정합니다. 이는 모델이 도구를 반복해서 호출하려는 무한 루프에 빠지는 것을 방지합니다. 이 동작은 `resetToolChoice` 플래그로 오버라이드하거나 `toolUseBehavior`를 구성하여 변경할 수 있습니다: |
| 143 | + |
| 144 | +- `'run_llm_again'`(기본값) – 도구 결과로 LLM을 다시 실행 |
| 145 | +- `'stop_on_first_tool'` – 첫 번째 도구 결과를 최종 답변으로 처리 |
| 146 | +- `{ stopAtToolNames: ['my_tool'] }` – 나열된 도구 중 하나가 호출되면 중지 |
| 147 | +- `(context, toolResults) => ...` – 실행을 종료해야 하는지 여부를 반환하는 사용자 정의 함수 |
| 148 | + |
| 149 | +```typescript |
| 150 | +const agent = new Agent({ |
| 151 | + ..., |
| 152 | + toolUseBehavior: 'stop_on_first_tool', |
| 153 | +}); |
| 154 | +``` |
| 155 | + |
| 156 | +--- |
| 157 | + |
| 158 | +## 다음 단계 |
| 159 | + |
| 160 | +- [Running Agents](/openai-agents-js/ko/guides/running-agents)를 학습하세요 |
| 161 | +- [Tools](/openai-agents-js/ko/guides/tools), [Guardrails](/openai-agents-js/ko/guides/guardrails), [Models](/openai-agents-js/ko/guides/models)를 살펴보세요 |
| 162 | +- 사이드바의 **@openai/agents** 아래에서 전체 TypeDoc 레퍼런스를 확인하세요 |
0 commit comments