
Hindsight가 어떻게 상태가 없는(Stateless) LLM을 거래 인지 에이전트로 변화시켰는가
요약
상태가 없는(Stateless) LLM의 한계를 극복하기 위해 Hindsight 메모리 계층을 활용한 영업 인텔리전스 에이전트 구축 사례를 소개합니다. FastAPI와 React를 기반으로 거래 생애 주기 전반의 이벤트를 저장하고 의미론적으로 검색하여 지속적인 컨텍스트를 유지합니다.
핵심 포인트
- LLM의 Stateless 특성을 보완하는 에이전트 메모리 계층 설계
- Hindsight를 통한 구조화된 컨텍스트 저장 및 의미론적 검색
- 영업 데이터(반대 의견, 이해관계자 등)의 지속적 추적 및 활용
- FastAPI, Groq, React를 활용한 풀스택 에이전트 아키텍처

🚩 문제점
제가 작업해 온 모든 LLM(Large Language Model)은 동일한 근본적인 결함을 가지고 있습니다. 바로 요청이 끝나는 순간 모든 것을 잊어버린다는 점입니다.
상식 퀴즈에 답하는 챗봇에게는 이것이 문제가 되지 않습니다.
하지만 세 번 전의 통화에서 나온 반대 의견, Salesforce 연동 요구 사항, 그리고 CTO가 실제 의사 결정권자라는 사실 등을 기억해야 하는 영업 인텔리전스 에이전트(Sales Intelligence Agent)에게는 이는 실행 불가능한 문제입니다.
이것이 바로 제가 Deal Intelligence Agent를 구축하며 해결하고자 했던 간극입니다. 이 시스템은 FastAPI + React로 구성되어 영업 팀의 파이프라인 전반에 걸쳐 지속적이고 쿼리 가능한(queryable) 메모리 계층을 제공합니다.
LLM(Groq의 Llama 3.3 70B)은 추론(inference) 시 여전히 상태가 없는(stateless) 상태입니다. 이를 거래를 인지하는 것처럼 느껴지게 만드는 것은 Hindsight입니다. Hindsight는 구조화된 컨텍스트(context)를 저장, 인덱싱 및 필요에 따라 의미론적으로 검색(semantically retrieves)하는 목적으로 설계된 에이전트 메모리 계층입니다.
⚙️ 에이전트의 역할
에이전트는 거래 생애 주기(lifecycle) 내의 모든 의미 있는 이벤트를 추적합니다:
- 제기된 반대 의견 (Objections raised)
- 언급된 경쟁사 (Competitors mentioned)
- 식별된 이해관계자 (Stakeholders identified)
- 가격 논의 (Pricing discussions)
- 통화 결과 (Call outcomes)
영업 담당자가 "이 잠재 고객이 어떤 반대 의견을 제기했으며, 우리가 이전에 어떻게 대응했나요?"라고 물으면, 시스템은 Hindsight에서 관련 메모리를 추출하여 프롬프트(prompt)에 주입하고, LLM은 일반적인 조언 대신 구체적인 내용을 바탕으로 답변합니다.
아키텍처 개요:
- FastAPI 백엔드 → REST + 스트리밍 엔드포인트 (streaming endpoints)
- MemoryService → Hindsight SDK를 래핑(wraps)
- LLMService → 메모리 컨텍스트를 포함한 Groq 완성(completions)
- DealService → 메모리 + LLM 오케스트레이션 (orchestrates)
- React 프론트엔드 → 채팅, 거래 상세 정보, 경쟁사 레이더, 리스크 히트맵, 매출 예측
- Twilio + SMTP → SMS, 음성 통화, 개인화된 후속 이메일
모든 외부 발신 작업(SMS, 브리핑, 이메일)은 메모리 이벤트로서 Hindsight에 다시 기록됩니다. 에이전트의 컨텍스트는 모든 상호작용과 함께 성장합니다.
🧩 핵심 과제: 세션 간의 상태 (State Across Sessions)
대부분의 튜토리얼은 메모리를 "마지막 몇 개의 메시지를 컨텍스트 윈도우 (Context Window)에 집어넣는 것"으로 취급합니다.
하지만 이는 금방 한계에 부딪힙니다:
- 컨텍스트 윈도우 (Context Windows)에는 엄격한 제한이 있습니다.
- 거래는 몇 달에 걸쳐 진행됩니다. 6개월 치의 노트를 하나의 프롬프트 (Prompt)에 다 담을 수는 없습니다.
올바른 추상화는 "더 긴 컨텍스트 윈도우"가 아닙니다.
그것은 바로 검색 (Retrieval)입니다: 현재 쿼리 (Query)와 관련된 내용만을 표면화하는 것입니다. 이것이 바로 Hindsight의 지속성 메모리 계층 (Persistent Memory Layer)이 제공하는 기능입니다.
📝 메모리가 기록되는 방식
메모리 쓰기는 부수 효과 (Side Effect)가 아니라 일급 객체 이벤트 (First-class Event)입니다.
python
async def store_memory(
self,
deal_id: str,
...
- 텍스트 임베딩 (Embedding) 시 [OBJECTION], [COMPETITOR], [STAKEHOLDER]를 앞에 붙여 검색 (Retrieval)이 컨텍스트를 인식할 수 있게 합니다.
- 비동기 래퍼 (Async wrapper, asyncio.to_thread)를 사용하여 FastAPI의 이벤트 루프 (Event Loop)가 차단되는 것을 방지합니다.
🔍 메모리가 읽히는 방식
검색 (Retrieval)은 Hindsight가 빛을 발하는 지점입니다.
python
@app.post("/api/chat")
async def chat(msg: ChatMessage):
memories = []
...
- 에이전트는 거래 ID (Deal ID) 범위 내에서 시맨틱 검색 (Semantic Search)을 실행하여, 가장 관련성이 높은 상위 10개의 항목을 반환하고 이를 프롬프트 (Prompt)에 주입합니다.
형식화된 컨텍스트 예시:
Code
[MEMORY CONTEXT]
1. [OBJECTION][2024-11-03] 가격이 현재 벤더보다 40% 높음
2. [COMPETITOR][2024-11-03] Salesforce가 기존 업체로 언급됨
...
"내일 있을 갱신 통화(Renewal Call)를 위한 최선의 전략은 무엇인가요?"
📊 승패 패턴 학습 (Win/Loss Pattern Learning)
모든 종료된 거래가 그 결과를 Hindsight에 기록하기 때문에, 시스템은 다음과 같은 패턴을 분석할 수 있습니다:
- 승리 대 패배와 상관관계가 있는 이의 제기 (Objections)
- 결과와 연결된 경쟁사 (Competitor) 언급
이것은 LLM이 학습 데이터로부터 일반화하는 것이 아닙니다. 여러분의 파이프라인 이력이 통찰력 (Insights)을 이끌어내는 것입니다.
🗣️ 실제 행동의 변화
이력이 없는 거래에 대해 질문하면 → 일반적인 조언을 제공합니다.
6개월간의 상호작용 후에 질문하면 → 근거가 있고 구체적인 전략을 제공합니다.
“Meridian Systems와의 이력을 바탕으로 볼 때, 그들의 CTO는 API 문서(API docs)를 장애물로 지목했습니다. 11월 3일에 제기된 가격에 대한 이의 제기는 할인 혜택을 장기 계약과 결합하여 성사시켰던 거래들과 일치합니다. API 문서를 먼저 제시한 다음, 24개월 약정을 기준으로 할인을 제안(anchor)하세요.”
💡 Lessons Learned (교훈)
메모리 쓰기(memory writes)를 로그(logs)가 아닌 도메인 이벤트(domain events)로 취급하세요.
적절한 식별자(identity)를 통해 메모리 범위를 지정하세요 (deal_id가 가장 효과적이었습니다).
시맨틱 검색(Semantic retrieval)은 LLM 유용성의 한계를 변화시킵니다.
비동기 래퍼(Async wrappers)는 동시성 버그(concurrency bugs)를 방지합니다.
우아한 성능 저하(Graceful degradation, fallback store)는 개발 및 온보딩(onboarding)을 더 쉽게 만듭니다.
🎯 Conclusion (결론)
LLM은 상태가 없습니다(stateless) — 하지만 에이전트(agents)는 그럴 필요가 없습니다.
Hindsight를 사용하면, 몇 번의 적절한 store_memory 및 get_relevant_memories 호출만으로도 “일반적인 챗봇(generic chatbot)”과 “거래 인지 에이전트(deal-aware agent)” 사이의 간극을 메울 수 있습니다.
모델은 그대로 멍청하게 유지됩니다.
메모리 계층(memory layer)이 모델을 똑똑해 보이게 만듭니다.
👉 Repo: https://github.com/chaitanya07-ai/deal-intelligence-agent
👉 Live Demo: https://deal-intelligence-agent-1.onrender.com/
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기