day6_practice/single_agent_problem.pyrouter_only.pytwo_agent_supervisor.py

라우팅과 handoff 플레이어

도구 8개를 한 에이전트에 몰아줄 때의 혼동에서 출발해, 누구에게 보낼지만 떼어 본 라우터를 거쳐, create_supervisor 가 그 결정을 handoff 도구 호출로 바꾸는 과정까지 따라갑니다. 질문 "클라우드운영팀 임직원 명단 알려줘" 하나가 Supervisor → data_agent → Supervisor 로 오가는 동안 messages 가 어떻게 쌓이는지 단계별로 넘겨 보세요.

한눈에 보는 흐름

1한 Agent에 도구 8개

fat_agent retrieve_docs search_budget_policy search_employees search_expenses search_projects search_assets write_report send_message

설명글이 닮은 조회 도구 4개가 한 목록에 섞여 있습니다. 같은 질문을 5번 던져 도구 선택이 흔들리는지 잽니다.

2라우팅만 떼어 보기

질문 문자열 하나 router_llm with_structured_output(Route) Route(next_agent=…, reason=…) data_agent research_agent general_agent FINISH

답이 정해진 이름 가운데 하나여야 하므로 Literal 로 묶은 구조화 출력으로 받습니다. 에이전트는 아직 없습니다.

3Supervisor 와 handoff

supervisor LLM + transfer_to_* 도구 data_agent list_team_members research_agent retrieve_docs handoff: 도구 호출 복귀: 자동

Supervisor 는 transfer_to_data_agent 같은 도구를 '호출'하는 것으로 일을 넘기고, 서브 에이전트는 마지막 답과 복귀 메시지 한 쌍을 들고 돌아옵니다.

왜 쪼개나 라우팅 Supervisor 조립 handoff 서브 Agent 복귀와 종합 다른 방법
클라우드운영팀 물류 최적화 관련 내용 fat_agent create_agent retrieve_docs search_budget_policy search_employees search_expenses search_projects search_assets write_report send_message 모델이 보는 것: 도구 이름, 설명글, 인자 ① 임직원 명단 질문 ② 연차 일수 질문 ③ 인사말 router_llm Route 구조화 출력 data_agent research_agent general_agent 점선: 이름뿐, 이 파일에 Agent 없음 START supervisor LLM + transfer_to_* 도구 2개 END data_agent list_team_members research_agent retrieve_docs 도구 호출 없이 답하면 transfer_to_data_agent transfer_to_research_agent 복귀: 마지막 메시지

터미널 출력

모델이 쓴 글은 (예시)

handoff 와 '에이전트를 도구로' 비교

견줄 점handoff (create_supervisor)에이전트를 도구로 (ask_research)
넘기는 쪽이 보내는 것인자 없는 도구 호출 하나. 무엇을 하라는 지시문은 없습니다모델이 question 인자에 직접 쓴 질문 한 문장
받는 쪽이 읽는 것그때까지의 대화 전체(사용자 질문, Supervisor 의 도구 호출, 이동 완료 메시지)HumanMessage(question) 하나
실행 주도권서브 에이전트 노드로 옮겨 가고, 끝나면 고정 간선으로 Supervisor 에 돌아옴부르는 쪽 에이전트가 계속 쥐고 있음. 도구 하나가 끝나기를 기다릴 뿐
돌아오는 것마지막 메시지 + 복귀 메시지 한 쌍 (output_mode="last_message" 기본값)마지막 메시지의 글만 담은 문자열 (get_text(r["messages"][-1]))
이 파일에서61줄에서 컴파일해 80~81줄에서 실제로 실행83~88줄에 정의만 있고 어디에도 연결돼 있지 않음

함정과 주의

관련 파일

day6_practice/single_agent_problem.py도구 8개를 든 에이전트에 같은 질문을 5번 던져 고른 도구 이름을 찍습니다. 도구는 모두 고정 문자열을 돌려주는 더미입니다.
day6_practice/router_only.py질문 3개를 Route 구조화 출력으로 분류해 라우팅 결정만 관찰합니다. 에이전트도 그래프도 없습니다.
day6_practice/two_agent_supervisor.py서브 에이전트 2개와 create_supervisor 로 만든 최소 Supervisor. 질문 2개를 stream_mode="updates" 로 실행하고, 끝에 연결되지 않은 ask_research 도구가 있습니다.