B2B 영업 제안을 위해 메모리리스 에이전트(Memoryless Agents) 사용을 중단한 이유
요약
B2B 영업 사이클과 같이 장기적인 맥락 유지가 필요한 환경에서 기존 stateless 에이전트의 한계를 분석합니다. 지속성 메모리(persistent memory)와 비용 제어 라우팅을 결합한 stateful 아키텍처를 통해 신뢰할 수 있는 영업 지능 에이전트를 구축하는 방법을 제시합니다.
핵심 포인트
- 전통적인 stateless 에이전트는 장기적인 영업 맥락을 기억하지 못하는 '건망증' 문제를 겪음
- 지속성 메모리 시스템을 통해 과거의 요구사항과 제약 조건을 유지해야 함
- LLM 라우팅 예산 최적화를 위한 비용 제어 가드레일 구축이 필수적임
- Hindsight, cascadeflow, Pydantic AI를 활용한 프로덕션급 아키텍처 설계
범용적인 텍스트 추출을 수행할 수 있는 소프트웨어 에이전트를 구축하는 것은 쉽습니다. 하지만 첫 번째 통화에서 잠재 고객이 기술적 우려를 제기하고, 세 번째 통화에서 보안 요구 사항을 제시하며, 다섯 번째 통화의 계약 제안서에는 이러한 기본 합의 사항들이 반영되기를 기대하는—수개월에 걸친 기업용 B2B 영업 사이클을 탐색할 수 있는 에이전트를 구축하는 것은 대부분의 표준 구현 방식이 무너지는 지점입니다.
만약 AI 에이전트를 전통적인 방식(상태가 없는(stateless), 단일 세션 기록에 의존하는 방식)으로 구축한다면, 에이전트는 건망증(amnesia)을 겪게 될 것입니다. 몇 주 전에 논의되었던 데이터베이스 제약 조건, 보안 감사, 경쟁사 가격표 등을 잊어버릴 것입니다. 이 글에서 저는 왜 제가 지속성 메모리(persistent memory)와 비용 제어 라우팅(cost-controlled routing)을 사용하는 상태 유지(stateful) 아키텍처로 전환했는지 설명하고, 시차를 두고 진행되는 통화 전반에 걸쳐 반대 의견을 기억하며 LLM 라우팅 예산을 네이티브하게 최적화하는 프로덕션 준비 단계의 Sales Deal Intelligence Agent를 어떻게 구축했는지 살펴보겠습니다.
B2B 영업에서의 건망증 문제
전형적인 기업용 소프트웨어 거래에서는 정보가 별도의 통화와 상호작용에 걸쳐 분산되어 있습니다. 예를 들어, 잠재 고객과의 탐색(discovery) 과정 동안 다음과 같은 반대 의견이 제기될 수 있습니다:
- CTO (1주 차): PostgreSQL 데이터베이스 마이그레이션에 대한 우려와 독점 데이터베이스 락(proprietary database locks)에 대한 엄격한 요구 사항을 표현합니다.
- SecOps (2주 차): HIPAA 준수 로그와 완료된 SOC2 Type II 감사 보고서를 요구합니다.
- 영업 부사장 (VP of Sales, 3주 차): 맞춤형 프로덕션 배포를 위한 엄격한 60일 마감 기한을 강조합니다.
- CFO (4주 차): 초기 가격 기준표를 Snowflake/HealthData-Sync와 같은 경쟁사와 비교합니다.
구매 팀이 마침내 "종합적인 비즈니스 계약 제안서를 생성해 주세요"라고 말할 때, 전통적인 상태가 없는(stateless) 에이전트는 추측을 할 수밖에 없습니다. 에이전트는 데이터베이스 제약 조건이나 60일 배송 마감 기한에 대한 기억이 없습니다. 결국 일반적인 제안서를 생성하게 됩니다. 현실 세계에서 이것은 수백만 달러 규모의 실수입니다.
이를 해결하기 위해 우리는 다음과 같은 요소들을 활용하는 에이전트 시스템 (agentic system)을 구축했습니다:
- Hindsight: 에이전트가 별도의 실행 실행 (execution runs) 간에도 관찰 내용을 유지, 회상 및 성찰할 수 있도록 하는 Vectorize의 에이전트 메모리 시스템 (agent memory system)입니다.
- cascadeflow: 모델 라우팅 (model routing)을 최적화하고 LLM 호출에 대한 예산 정책 제약 (budget policy constraints)을 강제하는 프로세스 내 런타임 지능 계층 (in-process runtime intelligence layer)입니다.
- Pydantic AI: 타입 안전하고 구조화된 에이전트 실행 (structured agent execution)을 위한 Python 프레임워크입니다.
시스템 아키텍처 (System Architecture): 메모리 및 비용 가드레일 (Memory & Cost Guardrails)
에이전트의 운영 파이프라인 (operational pipeline)은 두 가지 주요 기둥으로 구성됩니다:
- 지속적 메모리 루프 (The Persistent Memory Loop): 들어오는 각 통화 스크립트 (call transcript)를 에이전트가 분석합니다. 주요 고객 반대 의견 (client objections)이 추출, 파싱되어 Hindsight 내부의 개별 벡터 노드 (vector nodes)로 기록됩니다.
- 비용 제어 에스컬레이션 게이트 (The Cost-Controlled Escalation Gate): 단순한 질의(예: 스크립트에서 반대 의견 스캔)는 빠르고 저렴한 표준 모델(예: Groq를 통한
qwen-32b)로 라우팅됩니다. 복잡한 질의(예: 최종 맞춤형 제안서 초안 작성)는 cascadeflow에 의해 프리미엄 모델(예:gpt-oss-120b)로 자동 에스컬레이션(escalated)됩니다.
+-----------------------------+
| Prospect Call Transcript |
+--------------+--------------+
...
에이전트 루프 (Agentic Loop) 코딩하기
핵심적인 기술 구현을 살펴보겠습니다. 먼저, Pydantic을 사용하여 구조화된 응답 스키마 (structured response schema)를 정의합니다. 이를 통해 에이전트가 항상 깨끗하고 예측 가능한 변수를 반환하도록 보장합니다.
from pydantic import BaseModel, Field
class DiscoveryResponse(BaseModel):
...
- 지속적 컨텍스트 주입 (Persistent Context Injection) (Hindsight)
모든 API 호출 시 전체 과거 채팅 기록을 전달하는 대신 (이는 토큰 제한을 빠르게 초과하고 막대한 컨텍스트 노이즈를 유발합니다), 우리는 Pydantic AI의 의존성 주입 (Dependency Injection) 컨테이너 내에서 Hindsight의 recall 기능을 사용합니다. 이를 통해 에이전트의 시스템 프롬프트에 관련 있는 이의 제기 (Objection) 이력만이 동적으로 채워지도록 보장합니다.
from pydantic_ai import Agent, RunContext
from hindsight_client import Hindsight
...
이 데코레이터 훅 (Decorator hook)을 사용하면, discovery_agent.run()이 호출될 때마다 Hindsight가 과거의 이의 제기 내용을 검색하여 매끄럽게 주입하며, 컨텍스트 윈도우 (Context window)를 좁고 매우 정밀하게 유지합니다.
- 런타임 예산 최적화 (Runtime Budget Optimization) (cascadeflow)
토큰 오버헤드 (Token overhead)와 모델 가격을 관리하기 위해, 우리는 각 에이전트 호출을 cascadeflow 런타임 컨텍스트로 감쌉니다. 단순 추출 작업은 $0.02의 엄격한 예산 내에서 작동합니다. 작업 복잡도가 높아지면 (예: 제안서 초안 작성), 에이전트는 requires_escalation=True 플래그를 설정하고, cascadeflow는 해당 작업을 더 크고 프리미엄인 모델로 라우팅합니다.
import asyncio
import cascadeflow
from deal_agent import discovery_agent, hindsight_client
...
평가: 사이드 바이 사이드 (Side-by-Side) 증명
지속적 메모리의 영향을 검증하기 위해, 우리는 5회 세션의 영업 디스커버리 콜 (Sales discovery call) 사이클을 시뮬레이션했습니다. 최종 제안서 생성 단계에서, 메모리 접근 권한이 없는 에이전트와 Hindsight 메모리 접근 권한이 있는 에이전트 간의 비교를 실행했습니다.
다음은 실제 로그된 결과입니다:
케이스 A: 메모리 없는 제안서 생성 (건망증 상태)
Hindsight에 기록이 없는, 처음 보는 딜 ID (Deal ID)를 사용하여 제안서를 생성했을 때, 에이전트는 일반적인 피치 (Generic pitch)로 회귀할 수밖에 없었습니다:
[BEFORE] 일반적인 LLM 응답 (제로 메모리 / 일반적 컨텍스트)
------------------------------------------------------------
일반 기업용 제안서 - NEXUS HEALTH SYSTEMS
...
케이스 B: 메모리 있는 제안서 생성 (Hindsight 활성화)
Hindsight가 활성화된 상태에서, 에이전트는 과거의 분산된 통화(staggered calls)에서 발생한 5가지 반대 의견(objections)을 회상하여 맞춤화된 매우 구체적인 제안서 초안을 작성했습니다.
[AFTER] Hindsight 회상 응답 (5회 분산 세션 메모리)
------------------------------------------------------------
기업용 계약 제안서 - NEXUS HEALTH SYSTEMS (개인화됨)
...
또한, cascadeflow의 라우팅 엔진(routing engine)은 작업 복잡도에 따라 원활하게 적응했습니다:
세션 1–3 (반대 의견 추출 (Objection Extraction)): 예산 제한: $0.0200 | 실제 비용: $0.0012 | 모델: groq/qwen-32b (standard) | 상태: OPTIMIZED.
세션 4-5 (경쟁 분석 및 제안서 생성 (Competitive & Proposal Generation)): 예산 제한: $0.0800 | 실제 비용: $0.0450 | 모델: openai/gpt-oss-120b (premium) | 상태: ESCALATED.
학습된 3가지 핵심 엔지니어링 교훈
- RAG는 메모리가 아니다: 전통적인 벡터 RAG (Vector RAG)는 정적 문서를 검색하는 데는 탁월하지만, 시간적 정렬(temporal alignment) 기능이 부족합니다. 에이전트가 진정한 인지적 메모리 흔적(cognitive memory trail)을 형성하려면 상호작용 타임스탬프와 상태 변화를 기록하는 에이전트 메모리 벡터화 (Vectorize agent memory) 스키마가 필요합니다.
- 이식성을 위해 모의 객체(Mocks)를 표준화하라: 클라우드 마이크로서비스 키가 작동하지 않을 수 있는 오프라인 런타임이나 프로덕션 파이프라인용 에이전트 코드를 구축할 때는 표준 클라이언트 폴백 인터페이스(client fallback interfaces)를 구현하십시오. 이를 통해 네트워크 의존성 없이 핵심 상태 전이 머신(state transition machine)을 테스트할 수 있습니다.
- 기본값으로 설정하지 말고 에스컬레이션(Escalate)하라: 전체 파이프라인의 기본값을 비용이 많이 드는 프리미엄 LLM으로 설정하는 것은 막대한 비용 초과를 초래하는 게으른 엔지니어링 선택입니다. cascadeflow를 통해 비용 게이트(cost gates)를 구축하면, 기본 추출 쿼리의 90%를 무료 티어에 유지하면서 복잡한 쿼리만 프리미엄 모델로 라우팅할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기