Chapter 9 · Agent-Level Patterns

기관 하나에
패턴 하나

『Agentic Architectural Patterns for Building Multi-Agent Systems』 9장 — Ali Arsanjani, Juan Pablo Bustos, Thomas Kurian

앞선 장들이 여럿이 협업하는 법이었다면, 9장은 렌즈를 가장 기본 단위로 당긴다. 개별 자율 에이전트다. 4장에서 우리는 감지·추론·계획·행동·기억을 에이전트의 “기관”이라 불렀다. 그러나 해부를 아는 것은 첫걸음일 뿐이다. 9장의 패턴 다섯은 그 기관 하나하나를 신뢰성과 규모에 맞게 공학하는 법이다.

00

From anatomy to engineering

해부에서 공학으로 — 기관마다 하나씩

4장에서 우리는 에이전트의 해부학을 동사로 정의했다. 감지하고, 추론하고, 계획하고, 행동하고, 기억한다. 비유하자면 이것들이 에이전트가 가진 기관이고, 그 덕에 에이전트가 연속된 운영 루프 안에서 기능한다.

그러나 해부를 아는 것은 첫걸음일 뿐이다. 운영 준비된 시스템으로 가려면 기업 데이터의 현실과 업무 자동화가 요구하는 복잡한 로직에 각 부품을 맞추는 구체적 패턴이 필요하다. 그래서 초점이 옮겨간다. 에이전트가 무엇인가에서 각 기능을 어떻게 신뢰성 있고 확장 가능하게 공학할 것인가로.

PERCEPTION 지각 계층 COGNITION 인지·추론 계층 ACTION 행동 계층 MEMORY & KNOWLEDGE 기억·지식 계층 감지 Sense 이미지 · 음성 · 문서를 받아들인다 P5 · 멀티모달 감각 입력 추론 Reason · 계획 Plan 에이전트의 “뇌” · LLM이 구동한다 P4 · 구조화된 추론과 자기수정 행동 Act · 도구 Tools API와 함수를 호출해 환경을 바꾼다 P1 · 단일 에이전트 기준선 P2 · 에이전트 고유 기억세션 이력 · 사용자 선호 P3 · RAG 검색기외부 지식을 요청에 따라 행동의 결과가 다시 지각된다 맥락 공급 핵심 인지 루프는 지각 → 인지 → 행동 · 기억과 지식은 루프의 일부가 아니라 인지가 끌어 쓰는 자원이다

〈그림 9.1〉 에이전트 해부도와 다섯 패턴의 배치. 진사색은 지각, 청록은 인지와 행동이다.

부품역량구현하는 패턴요약
행동과 도구직접 명령을 실행하고 단순 도구를 쓴다단일 에이전트 기준선에이전트가 기본 자동화기로 기능한다. 행동 블록으로 워크플로를 실행하고, 도구 블록으로 외부 API와 접속한다.
기억다중 턴 대화를 다루고 핵심 사실을 기억한다에이전트 고유 기억에이전트가 상태를 갖게 된다. 기억 부품이 세션 이력과 사용자 선호를 유지해 맥락을 보존한다.
기억외부의 도메인 특화 데이터에 접근해 추론한다맥락 인지 검색 (RAG)에이전트가 사실에 접지된다. 기억 부품이 외부 데이터를 검색하도록 증강되어 환각이 줄어든다.
추론과 계획투명하게 추론하고 자기 오류를 교정한다구조화된 추론과 자기수정에이전트가 신뢰할 만해진다. 추론 부품으로 문제를 사고하고 계획 부품으로 복잡한 과업을 구조화한다.
감지문서와 UI의 시각 정보를 이해하고 처리한다멀티모달 감각 입력에이전트가 세상으로 난 관문이 된다. 감지 부품이 처리에 앞서 이미지·음성 같은 멀티모달 입력을 받아들인다.

〈표 9.1〉 에이전트 수준 패턴 채택을 위한 부품과 패턴

한 성숙도 단계에서 다음으로 올라가려면 다음 단계의 패턴을 구현할 것을 고려해야 한다. 그래야 지금 있는 자리에서 가고자 하는 자리까지의 경로가 분명해진다.

P1

Act & Tools

단일 에이전트 기준선 — 여기서 출발한다

P1

Single Agent Baseline

단일 에이전트 기준선

행동 · 도구출발점

문제의 배경

더 복잡한 패턴으로 들어가기 전에 기준선부터 세운다. 이 패턴은 에이전틱 시스템의 가장 단순한 형태다. 에이전트 하나가 다양한 도구에 접근해 워크플로 전체를 처리한다. 대부분의 에이전틱 구현이 여기서 시작하며, 더 앞선 아키텍처를 재는 잣대 노릇을 한다.

맥락

도구 사용을 요구할 만큼 복잡하지만, 여럿이 협업하는 부담까지는 필요 없는 과업에 이상적이다. 과업 지향 에이전틱 시스템을 짓는 가장 흔한 출발점이다.

문제

목표를 이루기 위해 일련의 반자율적 행동을 수행할 수 있는, 기본적이면서도 제 구실을 하는 에이전트를 어떻게 구성할 것인가.

해법

LLM으로 구동되는 단일 에이전트를 만든다. 도구(함수 또는 API) 집합과, 지시 프롬프트로 서술된 목표를 준다. ReAct(추론–행동)나 더 정교한 프랙탈 사고사슬(FCoT) 같은 추론 프레임워크를 써서, 에이전트의 LLM 중추가 어떤 도구를 어떤 순서로 어떤 매개변수로 호출할지 스스로 결정한다. 사고 과정(추론)과 실행 로직(계획) 전부가 이 하나의 에이전트 안에 담긴다.

사례 — 단순한 대출 승인 에이전트

01과업 접수 — 은행이 대출 신청의 1차 검토를 SingleLoanAgent에 맡긴다
02도구 호출get_credit_score로 신청인의 신용점수를 가져온다
03추론 — 점수 720을 요구 임계치 680과 비교한다. 충분하므로 최종 행동은 승인이라고 결론짓는다
04응답 — 최종 답을 반환한다. Approved
구현 예시 · Python
# 에이전트가 쓸 목(mock) 도구
def get_credit_score(applicant_id: str) -> int:
    """주어진 신청인 ID의 신용점수를 조회한다."""
    return 720

class SingleLoanAgent:
    def process_application(self, applicant_id: str, loan_amount: int):
        # LLM이 도구를 골라 호출한다
        credit_score = self.tools["get_credit_score"](applicant_id)

        # 도구 출력에 근거해 LLM이 결정을 내리는 과정을 시뮬레이션
        response = "Approved" if credit_score >= 680 else "Denied"
        print(f"AGENT DECISION: The loan for {applicant_id} is {response}.")
        return response

loan_agent = SingleLoanAgent()
loan_agent.process_application(applicant_id="john_doe_123", loan_amount=50000)

장점

  • 단순함 — 가장 큰 이점은 구현과 디버깅의 단순함이다. 멀티 에이전트 시스템에 견주면 단일 에이전트의 행동과 상태를 관리하고 관찰하기가 훨씬 쉽다.

단점

  • 확장성 — 도구 수나 도메인 복잡도가 늘어나면 잘 확장되지 않는다. 단일 에이전트가 과부하에 걸리고 프롬프트가 관리하기 어려울 만큼 복잡해져, 성능 저하와 오류 가능성 증가로 이어진다.

구현 지침

이 패턴은 완결된 자족적 실행 루프를 제공해, 함수 호출로 도구를 써서 특정 목표를 이루게 한다. 그러나 이 단순한 에이전트는 무상태다. 과거 상호작용의 기억이 없어 새 과업마다 처음인 것처럼 다룬다. 더 지능적이고 개인화된 경험을 만들려면 에이전트가 앞서 무슨 일이 있었는지 기억할 수 있어야 한다.

P2

Memory · state

에이전트 고유 맥락과 기억 — 명령 실행기에서 상태를 가진 존재로

P2

Agent-Specific Context and Memory

에이전트 고유 맥락과 기억

기억상태 관리

문제의 배경

에이전트가 지능적으로 행동하려면 자기 맥락을 알고(현재 환경을 감지하고) 그 환경에서의 과거 상호작용을 기억해야 한다. 여기에는 최초의 지시와 목표뿐 아니라 오케스트레이션의 사슬도 포함된다. 곧 상위 오케스트레이터가 있다면 그로부터 내려온 지시가 무엇인지까지 담긴다. 이것이 에이전트를 단순한 명령 실행기에서 배우고 적응하는 상태 보유 존재로 격상시킨다.

맥락

단순한 일회성 명령을 넘어서는 과업을 수행해야 하는 모든 에이전트에 결정적이다. 대화형 에이전트, 장기 실행 과업 자동화, 그리고 과거 사건이 미래 행동에 영향을 주는 모든 시스템에 근본적이다.

문제

특히 다중 턴 상호작용에서, 에이전트가 시간에 걸쳐 자기 과업과 맥락적 환경에 대한 일관된 이해를 어떻게 유지할 것인가.

해법 — 두 갈래의 기억

각 에이전트에 자기만의 기억 또는 상태 관리 체계를 갖춘다. 그러면 즉각 받는 지시와 별개로 맥락에 대한 지속적 이해를 쌓을 수 있다.

Short-term · 상태 관리

단기 기억

흔히 LLM의 컨텍스트 창 안에서 관리된다. 현재 과업이나 대화의 즉각적 이력을 담는다. 요약이나 최근 메시지의 슬라이딩 윈도 같은 기법으로 이 맥락을 관련성 있고 간결하게 유지한다.

Long-term · 영속 저장

장기 기억

벡터 데이터베이스나 키–값 저장소 같은 더 지속적인 저장 기제. 핵심 사실, 사용자 선호, 과거 결론을 저장했다가 이후 세션에서 꺼내 쓴다. 이 기억에 접근하는 흔한 패턴이 RAG다.

Note

대화 이력 전체를 LLM의 컨텍스트 창에 그냥 밀어 넣는 것은 흔히 역효과를 낸다. 연구에 따르면 모델은 긴 맥락의 “한가운데서 잃어버리는” 정보를 잊는 경향이 있고, 무관한 잡음에 주의를 빼앗긴다. 효과적인 기억 관리는 선택이 아니라 필수다.

사례 — 상태를 가진 대화형 대출 에이전트

1턴 · 사용자주택담보대출을 신청하려고 합니다.
1턴 · 에이전트도와드리겠습니다. 신청인 ID가 어떻게 되십니까?
▸ 단기 기억 갱신 — “사용자가 주택담보대출을 문의 중”
2턴 · 사용자제 ID는 'jane_doe_456'입니다.
2턴 · 에이전트감사합니다. Jane Doe 님의 대출 금액은 얼마입니까?
▸ 기억 요약과 새 메시지를 결합해 완전한 그림을 만든다 · 'jane_doe_456'이 그 주택담보대출 문의의 신청인 ID임을 이해한다

기억이 있기 때문에 에이전트는 중복 질문을 피하고 자연스럽고 논리적인 대화 흐름을 유지한다.

구현 예시 · Python
class ConversationalLoanAgent:
    def __init__(self):
        self.conversation_history = []
        self.memory_summary = "No prior conversation."

    def _update_memory(self):
        """맥락 크기를 관리하기 위해 대화를 요약한다."""
        # 실제 구현에서는 여기가 요약을 위한 LLM 호출이 된다
        if len(self.conversation_history) > 1:
            last_exchange = (
                f"User: '{self.conversation_history[-2]['content']}', "
                f"Agent: '{self.conversation_history[-1]['content']}'"
            )
            self.memory_summary = (
                "The conversation is about a loan application. "
                f"The last topic was: {last_exchange}"
            )
        print(f"MEMORY UPDATED: {self.memory_summary}")

    def handle_message(self, user_message: str):
        """대화에서 사용자의 새 메시지를 처리한다."""
        self.conversation_history.append(
            {"role": "user", "content": user_message})

        # 에이전트의 프롬프트에 기억 요약을 맥락으로 포함시킨다
        prompt = f"""
        [MEMORY] {self.memory_summary}
        [NEW MESSAGE] {user_message}
        """

이어지는 문제

일반적이거나 공유된 기억을 주면 에이전트가 과업이나 대화에 대한 일관된 내부 모델을 유지할 수 있다. 그러나 추론을 외부의 사실적 지식에 접지시키려면, 요청에 따라 특정 정보에 접근하는 더 전문화된 기제가 필요하다.

P3

Sensing with RAG

RAG로 감지한다 — 대화의 맥락과 사실의 지식은 다르다

P3

Context-Aware Retrieval (RAG)

맥락 인지 검색 · RAG

기억 · 지식그라운딩

문제의 배경

에이전트의 일반 기억이 대화적 맥락을 제공한다면, RAG 패턴은 추론을 외부의 사실적 지식에 접지시키는 구체적 기제를 제공한다. 에이전트 성능을 높이고, 환각을 줄이며, 사유(私有)이거나 실시간인 정보와 연결하는 가장 효과적이고 널리 채택된 패턴 중 하나다.

맥락

에이전트의 과업이 LLM의 정적인 사전학습 지식을 넘어서는 사실 정확성을 요구할 때 필수다. 고객 지원, 연구, 법률 분석을 비롯해 결정이 특정한 문서 집합에 근거해야 하는 모든 영역에서 널리 쓰인다.

문제

LLM은 방대하지만 정적인 데이터셋으로 사전학습되므로 그 지식은 낡거나 기업 특화 맥락이 없을 수 있다. 값비싼 재학습 없이 최신이거나 사유이거나 도메인 특화된 정보에 어떻게 접근하고 추론할 것인가.

해법 — 네 단계 파이프라인

01색인(Indexing) — 기업 문서를 정제하고 다룰 만한 덩어리로 나눈 뒤 벡터 임베딩으로 변환해 벡터 DB에 저장한다
02검색(Retrieval) — 질의가 들어오면 의미 유사도에 근거해 가장 관련 있는 문서 덩어리를 가져온다
03보강(Augmentation) — 검색된 덩어리를 에이전트의 프롬프트에 추가 맥락으로 삽입한다
04생성(Generation) — LLM이 이 보강된 맥락을 써서 주어진 정보에 접지된 응답을 생성한다

Tip

RAG의 정교함에는 폭이 있다. 단순 RAG는 직선적인 검색–생성 워크플로이고, 에이전틱 RAG는 질의 재구성이나 반복 검색 같은 과업을 수행하는 전문 에이전트를 도입해 결과를 개선한다.

사례 — RAG를 갖춘 대출 에이전트

목표는 가장 최신의 내부 정책 문서를 참조해 고액 대출 신청을 평가하는 것이다. 지식원은 은행의 모든 대출 정책이 담긴 벡터 DB다.

01과업 접수$750,000 대출 신청을 받는다
02검색 — 결정을 내리기 전에 RAGRetriever에 질의한다. policy for high-value loan
03정책 적용 — 신청인의 점수 720이 이 규모 대출에 요구되는 740에 미달함을 확인한다
04접지된 응답 — 검색된 정책에 명시적으로 근거한 결정을 반환한다. “고액 대출에 관한 정책 #23B에 따라 신용점수 부족으로 거절.”
구현 예시 · Python
# --- RAG 구성요소 시뮬레이션 ---
class RAGRetriever:
    def __init__(self):
        # 실제 시스템에서는 벡터 데이터베이스에 연결된다
        self.knowledge_base = {
            "high_value_loan": "Policy #23B: Loans over $500,000 require a credit score of 740.",
            "standard_loan":   "Policy #17A: Standard loans require a credit score of 680."
        }

    def retrieve(self, query: str) -> str:
        """질의에 근거해 관련 문서를 검색한다."""
        if "high-value" in query or "750000" in query:
            return self.knowledge_base["high_value_loan"]
        return self.knowledge_base["standard_loan"]

rag_agent = RAGEnabledLoanAgent()
rag_agent.process_application("jane_doe_456", 750000)

장점

  • 정확성과 신뢰 — 응답을 사실 데이터에 접지시켜 환각을 극적으로 줄이고 정확도를 높인다. 시스템 출력에 대한 사용자 신뢰가 쌓인다.
  • 지식의 신선도 — LLM을 재학습할 필요 없이 지식원만 갱신하면 에이전트의 지식이 실시간으로 갱신된다.

단점

  • 검색 품질에 대한 의존 — 성능이 색인된 데이터의 품질과 검색 기제의 효과에 크게 좌우된다. 검색기가 무관한 맥락을 끌어오면 LLM을 혼란시켜 응답을 악화시킨다.
  • 맥락 표류 — 색인된 지식 자체가 낡고 시대에 뒤떨어지면서 성능이 시간에 걸쳐 감쇠하는 RAG 드리프트 현상이 생길 수 있다.

구현 지침

검색의 품질이 무엇보다 중요하다. 원본 데이터를 효과적으로 정제하고 덩어리로 나누는 견고한 문서 처리 파이프라인에 투자하라. 임베딩 모델과 벡터 DB의 선택은 자기 도메인에 맞춰야 한다. 복잡한 질의라면 에이전틱 RAG를 고려하라. 전담 에이전트가 사용자의 최초 질의를 다듬고, 반복 검색을 수행하고, 여러 검색 문서의 결과를 종합해 LLM에 가능한 최선의 맥락을 제공하는 방식이다.

P4

Reason & Plan

구조화된 추론과 자기수정 — 첫 답을 돌려주지 않는다

P4

Structured Reasoning and Self-Correction

구조화된 추론과 자기수정

추론 · 계획신뢰성

문제의 배경

에이전트의 추론 능력은 자율성의 중심이다. 이 패턴 가족은 에이전트의 내부 사고 과정을 구조화해 추론의 질을 높이고 자기수정을 가능하게 하는 데 초점을 둔다. 단일 단계 의사결정을 넘어서는 일이다.

맥락

에이전트 결론의 신뢰성과 설명 가능성이 결정적일 때 쓴다. 에이전트가 지시를 오해하거나 관련 제약을 모두 고려하지 못할 위험이 큰 복잡한 다단계 과업에서 특히 값지다.

문제

특히 복잡한 다단계 과업에서, 에이전트의 추론 과정이 논리적이고 투명하며 핵심 지시와 정렬되도록 어떻게 보장할 것인가.

해법 — 네 기법을 합성한다

01 · from Ch.6

지속적 지시 고정

핵심 지시나 목표를 #OBJECTIVE: 같은 뚜렷한 태그로 심고, 맥락의 처음과 끝에 반복 배치해 “한가운데서 잃어버리는” 문제를 상쇄한다.

02 · Self-Correction

자기수정 루프

에이전트가 비평 단계를 거쳐 자기 출력을 최초의 지시와 맥락에 비추어 평가한다.

03 · Chain-of-Thought

사고사슬과 그 변형

즉답을 구하는 대신 “단계적으로 생각하라”고 프롬프트한다. LLM이 추론 과정을 밖으로 드러내게 강제해 흔히 더 정확한 결과를 낳고, 논리의 명확한 감사 추적을 남긴다. 변형으로 Graph of Thought, Tree of Thought 등이 있다.

04 · FCoT

프랙탈 사고사슬

점점 상세해지는 맥락 조리개를 써서 거시 → 중간 → 미시로 줌인한다. 각 수준마다 이중 목적함수를 정의하고 적용한다. 하나는 관심 요인을 극대화하고 다른 하나는 극소화한다. 매 반복마다 자기 성찰로 직전 루프에서 놓친 것을 교정한다.

사례 — 자기수정하는 대출 에이전트

RAG로 검색한 맥락은 이렇다. “정책 #23B: 50만 달러 초과 대출은 신용점수 740과 수동 검토를 요구한다.”

01초기 추론(CoT) — 신용점수 720의 $750,000 신청을 받아 단계적으로 예비 결정을 낸다. “1단계… 2단계: 정책 23B 적용. 3단계: 점수 720 < 740. 4단계: 예비 결정 — 거절.
02자기 비평 — 답을 돌려주기 전에 내부 감사자가 예비 결정을 검색된 맥락과 대조해 놓친 세부를 찾도록 프롬프트된다
03교정 발견 — “거절 결정 자체는 옳지만 추론이 불완전하다. 정책 #23B는 수동 검토가 가능하다고도 언급한다. 이 선택지가 최종 답에 포함돼야 한다.”
04최종 교정 출력 — “최종 결정: 정책 #23B에 근거해 자동 승인은 거절. 다만 이 신청은 수동 검토 대상에 해당한다.
구현 예시 · Python
class SelfCorrectingAgent:
    def process_with_self_correction(self, applicant_id: str, loan_amount: int):
        # 1. 사고사슬로 예비 결정을 만든다
        preliminary_decision = (
            f"Step 2: Policy 23B applies. "
            f"Step 3: Score is {credit_score}, which is less than 740. "
            f"Step 4: PRELIMINARY DECISION: Denied."
        )

        # 2. 비평 단계 — 검색된 정책과 대조해 스스로 검토한다
        critique = ("The decision to deny is correct, but Policy #23B "
                    "also mentions a 'manual review' as an option. "
                    "The reasoning should include this.")

        # 3. 교정된 최종 응답을 생성한다
        final = ("FINAL DECISION: Denied for automatic approval based on Policy #23B. "
                 "However, the application is eligible for a manual review.")
        return final

self_correcting_agent = SelfCorrectingAgent()
self_correcting_agent.process_with_self_correction("jane_doe_456", 750000)

장점

  • 신뢰성과 투명성 — 더 견고하고 믿을 만하며 투명한 추론으로 이어진다. 밖으로 드러난 사고 과정 덕에 개발자가 행동을 디버깅하기 쉽고, 감사자가 왜 그런 결정이 내려졌는지 이해하기 쉬워진다.

단점

  • 지연과 비용 — 추가 추론·검증 단계 때문에 지연과 계산 비용이 늘어난다. 자기수정 루프는 예컨대 LLM 호출이 하나가 아니라 최소 둘을 요구한다.

구현 지침

이 패턴들을 합성해야 효과가 최대가 된다. 복잡한 프롬프트 전부에 지속적 지시 고정을 써서 에이전트를 과업에 묶어 두라. 초기 추론에는 사고사슬을 써서 투명하고 단계적인 분석을 만들라. 그리고 판돈이 큰 결정에는 자기수정 루프를 더해, 두 번째 프롬프트가 LLM에게 비평자 또는 감사자 역할을 맡겨 최초의 CoT 추론을 원래 맥락과 제약에 비추어 검토하게 하라.

P5

Sense · perception

멀티모달 감각 입력 — 챗봇에서 진짜 코파일럿으로

P5

Multimodal Sensory Input

멀티모달 감각 입력

감지지각 확장

문제의 배경

시각 문서와 사용자 인터페이스에 의존하는 워크플로에서 제 구실을 하려면 에이전트가 텍스트 이상을 처리할 수 있어야 한다. 이 패턴은 에이전트의 지각을 언어 너머로 확장해, 이미지·스크린숏·시각 데이터를 추론 과정의 일부로 해석하게 한다. 단순한 챗봇에서 자기 환경을 시각적으로 이해하는 진짜 코파일럿으로 옮겨가는 것이다.

맥락

문서가 많은 산업의 에이전트에 필수다. 금융(청구서 처리), 헬스케어(의료 양식 분석), 물류(운송 라벨 판독) 같은 곳이다. 기업이 에이전트에게 스크린숏·청구서·제품 이미지를 워크플로의 일부로 해석하라고 요구하면서 특히 관련이 커졌다.

문제

시각 문서와 사용자 인터페이스에 의존하는 워크플로에서 에이전트가 어떻게 효과적으로 작동할 것인가.

해법 — 두 갈래

멀티모달 능력을 에이전트의 지각 부품에 통합한다. 이미지를 처리하고, OCR로 텍스트를 추출하고, 공간적 배치를 이해해 행동을 수행하게 한다. 접근법은 둘이다.

Approach A · Pipeline

전문 도구의 파이프라인

OCR 서비스 같은 전문 도구로 텍스트를 추출한 뒤, 추출된 텍스트를 별도의 LLM에 넘겨 추론시킨다. 각 단계에 대한 통제권이 더 크다.

01지각 — 신청서 이미지를 받는다
02도구 사용 — 이미지를 ocr_service에 보낸다
03관찰 — 추출된 텍스트를 받는다. “Applicant: John Doe, Loan Amount: $600,000”
04추론 — 이 텍스트를 LLM 중추에 넘겨 최종 판단을 내린다

Approach B · Native

네이티브 멀티모달 모델

더 앞선 접근으로, Google Gemini 계열처럼 본래 멀티모달인 단일 파운데이션 모델을 쓴다. 이미지·텍스트·오디오·비디오 입력을 동시에 처리하도록 학습된 모델이다. 이미지와 텍스트 프롬프트를 모델에 직접 먹이면 시각 파싱과 추론을 한 단계에서 처리한다.

01지각 — 이미지와 텍스트 프롬프트를 함께 받는다. “이 대출 신청서 이미지를 분석해 결정을 내려라”
02추론 — 단일 모델이 OCR과 의사결정을 한 번에 수행해 완결된 분석을 반환한다

감각 데이터를 어떻게 안전하게 얻는가

두 접근법이 어떻게 처리하는가를 다룬다면, 관련된 또 하나의 과제는 환경에서 그 데이터를 어떻게 안전하고 안정적으로 얻는가다. 에이전트가 디지털 환경뿐 아니라 물리 세계까지 감지하면서 특히 중요해졌다. 이 정보 교환을 다스리는 표준 프로토콜이 등장하고 있다.

  • MCP — 에이전트가 자기 조직 안의 도구를 발견하고 상호작용하는 표준화되고 안전한 방법을 제공한다. 개별 에이전트를 개발하는 근본 구성 블록으로, IoT 기기 같은 데서 자원이나 맥락 정보를 안전하게 얻어 추론의 입력으로 삼게 한다.
  • A2A 프로토콜 — 흔히 조직 경계를 넘는 에이전트 간 통신을 위해 설계됐다. 복잡한 워크플로나 멀티 에이전트 오케스트레이터를 만드는 구성 블록으로, 서로 다른 에이전트(예: 우리 회사와 파트너사의 것)가 OAuth 같은 인가·인증 요구를 처리하며 안전하게 소통해 공동 목표를 이루게 한다.
구현 예시 · Python · 두 전략 대비
# --- 구현 1: 전문 도구의 파이프라인 ---
def ocr_service(image_bytes: bytes) -> str:
    """이미지에서 텍스트를 추출하는 목 OCR 서비스."""
    # 실제 시스템에서는 Google Cloud Document AI 같은 서비스를 호출한다
    print("TOOL CALLED: OCR Service")
    return "Applicant: John Doe, ID: john_doe_123, Loan Amount: $600,000"

class PipelineMultimodalAgent:
    def process_application_from_image(self, image_file: bytes):
        extracted_text = ocr_service(image_file)          # 1단계: OCR
        return self.llm.reason(extracted_text)            # 2단계: 별도 LLM 추론

# --- 구현 2: 네이티브 멀티모달 모델 ---
class NativeMultimodalAgent:
    def process_application_from_image(self, image_file: bytes):
        prompt = "Analyze this loan application form image and provide a decision."
        # 이미지와 텍스트를 한 모델에 함께 넘긴다
        response = self.llm.generate_content(text_prompt=prompt, image_file=image_file)
        print(f"MODEL RESPONSE: '{response}'")
        return "Decision based on native multimodal processing."

장점

  • 용례의 확장 — 적용 가능한 용례를 극적으로 넓힌다. 언어 기반 도구에서 사람과 같은 인터페이스를 다룰 수 있는 디지털 비서로 옮겨간다. 예컨대 멀티모달 에이전트는 승인 워크플로의 이미지를 해석해 청구 처리 시간을 줄일 수 있다.

단점

  • 비용과 지연 — 멀티모달 모델은 계산 비용이 더 크고 지연이 높을 수 있다. 대체로 GPU 같은 전용 인프라가 필요하고, 텍스트 전용 모델과는 다른 시험·검증 접근을 요구한다.
06

Rollout & measurement

도입 순서와 측정 — 세 국면으로 쌓는다

성숙도 모델에 맞춘 단계적 구현이 유능한 에이전트를 배포하는 가장 효과적인 방법이다. 팀이 신뢰와 신뢰성의 토대를 먼저 쌓고, 시스템이 커지면서 더 앞선 역량을 얹어 가게 한다.

Phase 1

기초 자동화

단일 에이전트 기준선 · 에이전트 고유 기억

사내 IT 헬프데스크 봇처럼 물량이 많고 위험이 낮은 과업에 단순한 거래형 에이전트로 시작한다. 즉각적 가치를 입증하고 핵심 인프라를 쌓는다.

Phase 2

전문성 쌓기

맥락 인지 검색 (RAG)

기술 문서 같은 지식베이스에 연결해 에이전트를 강화한다. 이로써 에이전트가 믿을 수 있는 정보원이 된다.

Phase 3

고신뢰 자율성

구조화된 추론 · 멀티모달 입력

결정적 프로세스에는 신뢰성을 위한 자기수정과 실제 시각 데이터를 다룰 시각 능력을 더한다. 스캔된 청구서를 처리하고 승인 전에 자기 작업을 스스로 감사하는 재무 에이전트 같은 판돈 큰 워크플로가 가능해진다.

〈표 9.2〉 에이전트 역량 도입 순서의 예

측정 — 패턴별 평가 지표

아키텍처 선택을 정당화하려면 각 패턴이 제공하는 가치를 수량화해야 한다.

패턴지표계측 방법
단일 에이전트 기준선과업 완수율 / 도구 호출 성공률각 과업의 최종 결과(성공·실패)를 기록한다. 실패하거나 오류가 난 도구 API 호출을 로그에서 모니터링한다.
에이전트 고유 기억세션 일관성 점수 / 반복 질문 감소사람 평가자가 대화 품질을 채점한다. 에이전트가 기억했어야 할 정보를 사용자가 얼마나 자주 다시 말해야 하는지 추적한다.
맥락 인지 검색 (RAG)환각률 / 사실 정확도 점수골든 데이터셋에 대조해 응답을 평가하고 지어낸 정보의 빈도를 측정한다.
구조화된 추론자기수정 촉발률 / 최종 오류 감소비평 단계가 결함을 찾아내는 빈도를 추적한다. 예비 출력과 최종 출력의 오류율을 비교한다.
멀티모달 감각 입력데이터 추출 정확도 / 시각 과업 성공률OCR이나 필드 추출의 정확도를 정답 데이터에 대조해 측정한다. 이미지 입력이 필요한 워크플로의 과업 완수를 추적한다.

〈표 9.3〉 에이전트 수준 패턴 평가 지표 표본