에이전트 실행
에이전트는 Runner
클래스로 실행할 수 있습니다. 선택지는 3가지입니다:
- 비동기로 실행하고
RunResult
를 반환하는Runner.run()
- 동기 메서드로 내부적으로
.run()
을 실행하는Runner.run_sync()
- 비동기로 실행하고
RunResultStreaming
를 반환하는Runner.run_streamed()
. LLM을 스트리밍 모드로 호출하고, 수신되는 대로 이벤트를 스트리밍합니다
from agents import Agent, Runner
async def main():
agent = Agent(name="Assistant", instructions="You are a helpful assistant")
result = await Runner.run(agent, "Write a haiku about recursion in programming.")
print(result.final_output)
# Code within the code,
# Functions calling themselves,
# Infinite loop's dance
자세한 내용은 결과 가이드를 참고하세요.
에이전트 루프
Runner
의 run 메서드를 사용할 때 시작 에이전트와 입력을 전달합니다. 입력은 문자열(사용자 메시지로 간주) 또는 OpenAI Responses API의 입력 항목 리스트일 수 있습니다.
그런 다음 러너는 다음 루프를 실행합니다:
- 현재 입력으로 현재 에이전트에 대해 LLM을 호출합니다
- LLM이 출력을 생성합니다
- LLM이
final_output
을 반환하면 루프가 종료되고 결과를 반환합니다 - LLM이 핸드오프를 수행하면 현재 에이전트와 입력을 업데이트하고 루프를 다시 실행합니다
- LLM이 도구 호출을 생성하면 해당 도구 호출을 실행하고 결과를 추가한 뒤 루프를 다시 실행합니다
- LLM이
- 전달된
max_turns
를 초과하면MaxTurnsExceeded
예외를 발생시킵니다
Note
LLM 출력이 "최종 출력"으로 간주되는 규칙은 원하는 타입의 텍스트 출력을 생성하고 도구 호출이 없을 때입니다.
스트리밍
스트리밍을 사용하면 LLM 실행 중 스트리밍 이벤트를 추가로 수신할 수 있습니다. 스트림이 완료되면 RunResultStreaming
에 실행에 대한 완전한 정보(생성된 모든 새로운 출력 포함)가 담깁니다. 스트리밍 이벤트는 .stream_events()
로 호출할 수 있습니다. 자세한 내용은 스트리밍 가이드를 참고하세요.
실행 구성
run_config
매개변수로 에이전트 실행에 대한 전역 설정을 구성할 수 있습니다:
model
: 각 Agent의model
과 무관하게 사용할 전역 LLM 모델을 설정model_provider
: 모델 이름 조회를 위한 모델 제공자, 기본값은 OpenAImodel_settings
: 에이전트별 설정을 재정의. 예: 전역temperature
또는top_p
설정input_guardrails
,output_guardrails
: 모든 실행에 포함할 입력/출력 가드레일 리스트handoff_input_filter
: 핸드오프에 이미 지정된 것이 없을 경우 모든 핸드오프에 적용할 전역 입력 필터. 입력 필터로 새로운 에이전트에 전달되는 입력을 편집할 수 있습니다. 자세한 내용은Handoff.input_filter
문서를 참고하세요tracing_disabled
: 전체 실행에 대해 트레이싱을 비활성화trace_include_sensitive_data
: LLM 및 도구 호출의 입출력 등 잠재적으로 민감한 데이터를 트레이스에 포함할지 여부 설정workflow_name
,trace_id
,group_id
: 실행의 트레이싱 워크플로 이름, 트레이스 ID, 트레이스 그룹 ID 설정. 최소한workflow_name
설정을 권장합니다. 그룹 ID는 선택 항목으로 여러 실행에 걸쳐 트레이스를 연결할 수 있습니다trace_metadata
: 모든 트레이스에 포함할 메타데이터
대화/채팅 스레드
어떤 run 메서드를 호출하든 하나 이상의 에이전트 실행(즉, 하나 이상의 LLM 호출)로 이어질 수 있지만, 채팅 대화에서 하나의 논리적 턴을 나타냅니다. 예:
- 사용자 턴: 사용자가 텍스트 입력
- 러너 실행: 첫 번째 에이전트가 LLM 호출, 도구 실행, 두 번째 에이전트로 핸드오프, 두 번째 에이전트가 추가 도구 실행 후 출력 생성
에이전트 실행이 끝나면 사용자에게 무엇을 보여줄지 선택할 수 있습니다. 예를 들어, 에이전트가 생성한 모든 새 항목을 보여주거나 최종 출력만 보여줄 수 있습니다. 어떤 방식을 택하든 사용자가 후속 질문을 할 수 있으며, 그 경우 run 메서드를 다시 호출하면 됩니다.
수동 대화 관리
다음 턴의 입력을 얻기 위해 RunResultBase.to_input_list()
메서드를 사용하여 대화 기록을 수동으로 관리할 수 있습니다:
async def main():
agent = Agent(name="Assistant", instructions="Reply very concisely.")
thread_id = "thread_123" # Example thread ID
with trace(workflow_name="Conversation", group_id=thread_id):
# First turn
result = await Runner.run(agent, "What city is the Golden Gate Bridge in?")
print(result.final_output)
# San Francisco
# Second turn
new_input = result.to_input_list() + [{"role": "user", "content": "What state is it in?"}]
result = await Runner.run(agent, new_input)
print(result.final_output)
# California
Sessions를 통한 자동 대화 관리
더 간단한 방법으로, Sessions를 사용하면 .to_input_list()
를 수동으로 호출하지 않고도 대화 기록을 자동으로 처리할 수 있습니다:
from agents import Agent, Runner, SQLiteSession
async def main():
agent = Agent(name="Assistant", instructions="Reply very concisely.")
# Create session instance
session = SQLiteSession("conversation_123")
thread_id = "thread_123" # Example thread ID
with trace(workflow_name="Conversation", group_id=thread_id):
# First turn
result = await Runner.run(agent, "What city is the Golden Gate Bridge in?", session=session)
print(result.final_output)
# San Francisco
# Second turn - agent automatically remembers previous context
result = await Runner.run(agent, "What state is it in?", session=session)
print(result.final_output)
# California
Sessions는 자동으로 다음을 수행합니다:
- 각 실행 전에 대화 기록을 조회
- 각 실행 후 새로운 메시지를 저장
- 서로 다른 세션 ID에 대해 별도의 대화를 유지
자세한 내용은 Sessions 문서를 참고하세요.
장기 실행 에이전트 & 휴먼인더루프 (HITL)
Agents SDK의 Temporal 통합을 사용하여 휴먼인더루프 작업을 포함한 내구성이 있는 장기 실행 워크플로를 운영할 수 있습니다. Temporal과 Agents SDK가 함께 장기 실행 작업을 완료하는 데 사용하는 데모는 이 영상에서 확인할 수 있으며, 문서는 여기에서 볼 수 있습니다.
예외
SDK는 특정 경우 예외를 발생시킵니다. 전체 목록은 agents.exceptions
에 있습니다. 개요는 다음과 같습니다:
AgentsException
: SDK 내에서 발생하는 모든 예외의 기본 클래스입니다. 다른 모든 구체적 예외의 상위 일반 타입 역할을 합니다MaxTurnsExceeded
: 에이전트 실행이max_turns
제한을 초과했을 때 발생합니다.Runner.run
,Runner.run_sync
,Runner.run_streamed
메서드에 해당하며, 지정된 상호작용 턴 수 내에 에이전트가 작업을 완료하지 못했음을 나타냅니다ModelBehaviorError
: 기본 모델(LLM)이 예상치 못한 출력이나 유효하지 않은 출력을 생성할 때 발생합니다. 다음을 포함할 수 있습니다:- 잘못된 JSON: 특히 특정
output_type
이 정의된 경우, 도구 호출 또는 직접 출력에서 잘못된 JSON 구조를 제공하는 경우 - 예기치 않은 도구 관련 실패: 모델이 예상된 방식으로 도구를 사용하지 못하는 경우
- 잘못된 JSON: 특히 특정
UserError
: SDK를 사용하는 코드 작성자(당신)가 SDK 사용 중 오류를 범했을 때 발생합니다. 보통 잘못된 코드 구현, 잘못된 구성, SDK API의 오용에서 비롯됩니다InputGuardrailTripwireTriggered
,OutputGuardrailTripwireTriggered
: 각각 입력 가드레일 또는 출력 가드레일의 조건이 충족될 때 발생합니다. 입력 가드레일은 처리 전에 수신 메시지를 확인하고, 출력 가드레일은 전달 전에 에이전트의 최종 응답을 확인합니다