KT Enterprise B2B Sales AI Agent 구축
㈜휴트리온 · KT ds / Client: KT Enterprise
2026.07 — 진행중 (2026.09 베타 · 2026.12 상용 목표)
Overview
KT Enterprise B2B 사업 부문의 영업 생산성 혁신을 위해 협업 툴(Teams/Outlook)·내부 CRM을 연동하는 백엔드 AI 에이전트 시스템을 구축하는 프로젝트입니다. 기존에는 단순 질의응답형 챗봇과 수동 응대(월 2천 건)에 의존했고, 영업정보가 개인 PC에 분산 저장되어 전사 자산으로 축적되지 못하는 한계가 있었습니다. 이를 해결하기 위해 데이터 자동 생성·적재에 초점을 맞춘 백엔드 파이프라인을 설계하고 있으며, 저는 이 중 영업 대상 기업의 공시(DART)·뉴스·나라장터(G2B) 조달 데이터를 자동 수집·분석해 타겟 고객사 인사이트가 반영된 Account Plan 초안을 생성하고 대시보드로 제공하는 플로우를 메인으로 전담하고 있습니다. 전체 10명(휴트리온 5 · KT ds 5) 규모에서 에이전트 단위 1인 전담 체제로 운영되며, 외부 데이터 수집·전처리부터 분석 에이전트 8종 설계·개발, LLM 연동·호출 비용 통제, 분석 결과 대시보드까지 해당 에이전트의 전 계층을 단독 설계·구현하고 있습니다. 2026.09 베타, 2026.12 상용 오픈을 목표로 진행 중입니다.
Key Metrics
Highlights
- 이종 데이터 통합 수집 파이프라인 구축 — 나라장터(G2B)·OpenDART·뉴스(네이버 검색 API) 특성에 맞춘 비동기 데몬 및 30분 주기 스케줄러 연동, 소스별 독립 라이프사이클 설계로 계정 단위 적재 자동화. RSS 경로는 수집 성공률·중복 문제로 제거하고 검색 API 단일 경로로 일원화
- 무결성 보장 전처리 계층 설계 — Pydantic 스키마·DART 법인명(약칭·별칭 DB) 기준 엔티티 정규화, SHA-256 페이로드 해싱으로 중복 필터링(멱등성 보장), 원문(Raw)과 가공 데이터 분리 저장으로 파싱 규칙 변경 시 즉시 재처리 가능
- 멀티 에이전트 설계 및 동시성 최적화 — 도메인별 프롬프트·JSON 스키마가 독립 동작하는 8종 서브 에이전트 설계, 스레드 풀 병렬 실행으로 일괄 생성 지연 2분대(순차) → 15.7초로 87% 단축
- 환각 제어 및 API 과금 최적화 — 수집 데이터만 참조하도록 프롬프트 제약, API 장애 시 대체 공급자 자동 전환 폴백 라우팅, 조회 경로 LLM 호출 차단·일 2회 스케줄러 기반 생성·영구 번역 캐시로 화면 갱신에 따른 과금 원천 차단
- RESTful API 서빙 및 상태 격리 — FastAPI 기반 계정 오버뷰·AI 채팅·다중 포맷 내보내기(JSON/CSV/XLSX/ZIP) API 개발, 대상 회사 전환 시 이전 세션 데이터가 섞이지 않도록 상태 격리 로직 구현
- 상용 규모(고객사 12,000곳) 대응 — DART 하루 한도(2만) 대비 호출 구조 재설계. 계수 지점을 저수준 요청 함수 2곳으로 수렴시켜 누락 없이 집계하고, 자체 계수 도달·API 한도 응답 2단으로 차단. 예산 소진 시 커서를 저장해 다음 날 이어받는 백필로 12,000곳을 약 4일 주기로 순회
- 외부 API 호출 절감 — 업종코드를 회사당 1회씩 조회하던 것을 업종명 기반 유도로 대체(12,000회 → 0회, 커버리지 347/347·DART 원본 5곳과 5/5 일치). 기업 식별자를 이름 대조에서 종목코드 대조로 바꿔 매칭률 28% → 100% 확보(추가 호출 1회)
- 조달 DB 경량화 — 원본 API 응답이 용량의 85%(898MB)를 차지하나 실제 참조 경로는 첨부 주소 한 곳뿐임을 전수 확인 후, 해당 값만 공고 표로 투영하고 원본 제거. 1,058MB → 92MB(8.7%), 공고 81,661건·첨부 77,179건(94%) 보존. 읽는 쪽이 새 경로를 먼저 보고 없으면 기존 경로로 떨어지게 해 이전·배포 순서 의존 제거
- 초안 근거 분배 — 에이전트 3종이 동일 근거를 통째로 받아 사업보고서 9,000자가 3회 중복되던 구조를, 블록 소유자를 정의해 담당 에이전트만 수신하도록 변경. 입력 53,262 → 15,138자. 미정의 블록은 전원 전달해 신규 블록이 조용히 누락되지 않게 방어
- LLM 운영 모니터링 — Langfuse 연동으로 워크플로 단계별 응답 속도·프롬프트 입출력 로그·토큰 소모량 메트릭 실시간 수집·분석
- LangGraph 기반 멀티 노드 에이전트 구현 — AgentState 설계(사용자 질문·연동 툴 목록·수집 정보·검색 컨텍스트 관리), Query Analysis & Routing / Generation / Slot-Filling·Rewrite 노드 개발
- Agent 코어 구성요소 개발 — 의도 분류기, 가드레일 프롬프트 엔진(비로그인 제한·내부/민감 정보 노출 차단), 멀티턴 세션 관리자(최대 5회 대화 컨텍스트 유지)
- 오케스트레이터(Master Agent) ↔ Sub Agent 호출 패턴 구현 — 단일 통신·순차·병렬 멀티에이전트·멀티턴·가드레일 5개 실행 패턴
- BMAD 6종 표준 명세 문서 기반 에이전트 설계 및 도구(Tools) 매핑
- 답변 UI 연계 개발 — 자연어 답변·Product Card·출처(Citation) 스트리밍 출력, 바로가기·가입 상담 링크·상담원 이관 연동
- 멀티 RAG 통합 검색 파이프라인 구축 참여 — 하이브리드 검색(BM25 + Vector / Graph Traversal), Top-K 검색, BGE-Reranker 기반 Re-Ranking
- GraphRAG(Entity·관계 추출, 지식 그래프 적재) 및 LLM Wiki(표준 용어·가이드라인 MD 구조화) 연동 검증 지원
- B2B 세일즈 자동화 에이전트 개발 참여 — Teams/Outlook 일정·회의 감지 → 영업활동 레코드 자동 생성·KOS-CRM 등록, DART·뉴스·나라장터 크롤링 → 기업 인텔리전스 분석 → Account Plan 초안 생성
Key Decisions
분석 에이전트 8종 병렬 실행으로 지연 87% 단축
문제분석 품질을 위해 관점별로 에이전트를 8종으로 분리했으나, 순차 실행 구조에서 각 LLM 호출 시간이 그대로 누적되어 일괄 생성에 2분 이상이 소요됐습니다.
결정각 에이전트의 역할·프롬프트·출력 JSON 스키마를 독립적으로 격리해 상호 의존성을 제거하고, 스레드 풀(ThreadPoolExecutor) 기반 병렬 실행으로 전환. LLM 호출이 I/O 대기 중심이라는 점을 근거로 GIL 영향 없이 동시 처리가 가능하다고 판단.
결과분석 관점 8종을 유지한 채 일괄 생성 지연을 2분대에서 15.7초로 87% 단축. 전체 소요가 합계가 아닌 최장 단일 작업에 수렴하는 구조가 되어 관점 확장 여지 확보.
SHA-256 해싱·원문 분리 저장으로 멱등성 확보
문제30분 주기 수집에서 외부 API가 '최근 N건'을 반환하는 특성상 중복 적재가 반복됐고, 파싱 규칙을 변경해도 이미 적재된 과거 데이터에는 적용할 수 없었습니다.
결정출처가 부여한 ID가 아닌 페이로드 내용 자체를 SHA-256으로 해싱해 중복을 판별하고, 원문(Raw)과 가공 데이터를 분리 저장하는 구조로 설계.
결과수집기를 반복 실행해도 결과가 동일한 멱등성을 확보해 실패 시 재실행만으로 복구 가능. 다만 원문 보관은 6개월 백필 시점에 재검토했습니다. 재처리 목적으로 남긴 원본이 실제로는 한 번도 쓰이지 않은 채 용량의 85%를 차지해, 조달 데이터에 한해 실사용 값만 남기고 원본을 제거했습니다.
호출 예산제·커서 백필로 상용 규모(12,000곳) 대응
문제검증 대상이 4개사일 때는 회사당 6회, 하루 24회로 DART 한도(2만)의 0.1%였습니다. 12,000곳으로 늘리면 72,000회가 되어 한도를 3.6배 초과하는데, 호출 횟수를 세는 코드가 없었습니다. 이 API는 한도를 넘겨도 HTTP 200을 반환하고 본문 코드로만 알리므로, 대부분의 호출부가 이를 예외로 취급하지 않아 빈 응답을 정상으로 받아 기존 캐시를 덮어쓸 수 있었습니다.
결정계수 지점을 모든 fetch 함수가 반드시 거치는 저수준 요청 함수 2곳으로 수렴시켜 누락을 구조적으로 차단. 자체 계수가 예산에 닿으면 호출 전에 막고, 응답에 한도 초과 코드가 있으면 그날 예산을 즉시 닫는 2단 감지를 적용(재시도·다른 프로세스로 계수가 어긋날 수 있으므로 실제 응답을 우선). 예산 소진 시 회사 단위로 커서를 저장해 다음 날 이어받는 백필을 도입하고, 호출자별로 예외 처리를 나눠 대시보드는 빈 결과를, 적재 워커는 예외를 받게 했습니다. 워커가 '예산이 없어 못 받았다'와 '받았는데 비었다'를 구분해야 커서를 옮길지 판단할 수 있기 때문입니다.
결과12,000곳을 약 4일 주기로 순회하는 구조 확보. 시뮬레이션으로 예산 소진 중단·커서 이어받기(중복 0)·완주 후 리셋을 검증했습니다. 함께 호출 자체도 줄여, 업종코드는 소비처가 앞 2자리만 쓰는 것을 확인해 업종명 유도로 대체(12,000회 → 0회), 기업 식별자는 이름 대조를 종목코드 대조로 바꿔 매칭률 28% → 100%로 올렸습니다.
원본 보관에서 필요한 값의 투영으로 (1,058MB → 92MB)
문제조달 공고 6개월치를 백필하니 SQLite 파일이 1,058MB가 되어 저장소에 포함할 수 없게 됐습니다. 용량의 85%(898MB)가 API 응답을 통째로 저장한 테이블이었는데, 공고문 첨부 주소가 그 원본 안에만 있어(공고의 94%) 단순 삭제가 불가능했습니다.
결정원본을 참조하는 코드 경로를 전수 확인한 결과 첨부 주소 한 곳뿐임을 밝히고, 그 값만 공고 표에 JSON 컬럼으로 투영한 뒤 원본을 제거. 재처리 가능성을 포기하는 결정이었으나, 6개월간 파싱 로직을 여러 번 고치면서도 원본 재처리를 한 번도 하지 않았다는 사실을 근거로 삼았습니다. 데이터 이전 전에 읽는 쪽을 먼저 고쳐, 새 컬럼이 비면 기존 경로로 자동 폴백하도록 해 이전과 배포의 순서 의존을 없앴습니다. 비가역 작업이므로 --dry-run·원본 파일 보존·복원 스크립트를 함께 뒀습니다.
결과1,058MB → 92MB(8.7%)로 줄여 저장소 포함이 가능해졌고, 공고 81,661건·수요기관 603곳·첨부 77,179건(94%)을 보존했습니다. 조회 기능은 호출부 변경 없이 동일하게 동작합니다.
LangGraph 기반 멀티 노드 에이전트 코어 설계
문제GPU 서버 스펙·가격 질의처럼 하나의 질문에 상품 검색·조건 비교·지식 조회가 동시에 필요한 케이스에서, 단일 LLM 호출만으로는 툴 선택과 응답 품질을 안정적으로 통제하기 어려웠습니다.
결정사용자 질문·연동 툴 목록·수집 정보·검색 컨텍스트를 관리하는 AgentState를 정의하고, User Chat UI로부터 시작되는 전체 실행 그래프를 설계. Query Analysis & Routing 노드(LLM 의도 분석 기반 툴 라우팅), Generation 노드(답변 생성·유효성 체크), Slot-Filling/Rewrite 노드(필수 정보 누락 시 역질문·쿼리 재작성 루프)로 책임을 분리.
결과질문 의도에 따라 VectorDB RAG Retrieval + LLM Wiki Lookup을 병행 실행하는 등 동적 라우팅을 구현하고, [사용자 발화 → 의도 분류·가드레일 → RAG 검색 → 상품 안내·추천 → 멀티턴 대화 → 답변·UI 연계]의 6단계 프로세스를 완성.
Generation ↔ Slot-Filling 조건부 흐름 (자기 교정 루프)
문제답변 생성에 필요한 필수 정보가 누락된 상태에서 그대로 응답하면 부정확하거나 환각이 섞인 답변이 나갔습니다.
결정Generation 노드에서 정보 충분(Perfect Info) 시 텍스트·Product Card·출처(Citation)를 스트리밍 출력하고, 정보 부족(Info Missing) 시 Slot-Filling 노드로 분기하는 조건부 흐름을 설계. 누락 슬롯이 있으면 역질문(예: "혹시 현재 KT 전용선을 이용 중이신가요?")을 생성하고 쿼리를 재정교화한 뒤 재검색하는 자기 교정 루프를 구현.
결과정보가 충분할 때만 답변을 확정 출력하고, 부족하면 역질문으로 보완해 응답 신뢰도를 확보.
질의 유형별 멀티 RAG 지식 소스 전략
문제FAQ·상품 설명, 관계·종합 질의, 표준 용어·규정은 성격이 달라 하나의 검색 방식으로는 정확도와 일관성을 동시에 확보하기 어려웠습니다.
결정일반 FAQ·상품 설명은 Vector RAG(의미 유사도·대용량 확장), 관계·종합 질의는 GraphRAG(Multi-hop 추론), 표준 용어·규정·정책은 LLM Wiki로 매핑하는 지식 소스 전략을 수립. 문서 유형별 기준과 메타데이터(제목·출처·기준일·카테고리)를 정의·표준화.
결과질의 특성에 맞는 지식 소스를 선택해 검색 정확도를 높이고, 용어 일관성 보장·환각 감소 기반을 마련.
하이브리드 검색 + Re-Ranking 검색 품질 최적화
문제단일 검색 방식으로는 키워드 정합성과 의미 유사도를 모두 잡기 어렵고, Top-K 결과에 불필요한 컨텍스트가 섞여 답변 품질을 떨어뜨렸습니다.
결정BM25 + Vector 하이브리드 검색과 Graph Traversal을 결합한 검색 계층을 구성하고 Top-K 검색·파이프라인 파라미터를 튜닝. BGE-Reranker를 활용해 검색 정보를 점수화하고 불필요 정보를 제거하는 Grade & Rerank 컨텍스트 검증을 적용.
결과검색 정확도와 컨텍스트 품질을 향상시키고, RAG/GraphRAG/Wiki 통합 컨텍스트를 Agent·LLM에 전달해 실시간 답변 생성과 연결되는 End-to-End 파이프라인(문서 수집 → 구조화 → 지식 데이터화 → RAG 검색 → 통합 지식 결과)을 구성.
Challenges & Solutions
문제상품 카탈로그·규정 문서·마스터 데이터 등 정형화되지 않은 문서로 멀티 RAG를 구축하는 과정에서 문서 레이아웃 차이, 출처·기준일 누락, 전처리 기준 불일치가 발생하면 동일한 질문에도 서로 다른 문서가 검색되어 판단 일관성이 흔들렸습니다.
해결문서 유형별 기준과 메타데이터(출처·기준일·카테고리) 정리 방식을 정의하고, Parsing Engine 기반 문서 구조화와 함께 문서 수집→구조화→전처리→검색으로 이어지는 처리 흐름을 표준화. 입력 단계에서부터 오류 가능성을 줄이는 구조 개선에 집중.
문제복잡한 관계 질의·상품 간 연관·종합 질문은 단순 벡터 유사도 검색만으로는 정확히 답하기 어려웠습니다.
해결GraphRAG로 Entity·관계를 추출해 지식 그래프를 구축·적재하고, 표준 용어·고정 가이드라인·마스터 정보는 Markdown 위키(LLM Wiki)로 구조화해 용어 일관성 보장·환각 감소를 지원.
Impact
- 영업사원의 Any Device & Any Time 완결적 영업 수행 체계 구축 및 문서 작성시간 단축
- 개인 PC에 분산되어 있던 영업정보의 전사 자산화·가시성 확보, 담당자 교체 시 고객 히스토리 유실 방지
- 월 2천 건 상담(8명 수동 대응)의 AI 자동화 — AI 에이전트 즉시 응답, 필요 시 상담원 이관으로 처리 시간 단축 및 직원 업무 집중도 향상
- 24시간 상시 대응 챗봇을 통한 고객 데이터 기반 상품 추천 및 영업 기회 발굴·전환
- 멀티 RAG + Re-Ranking 구조로 검색 정확도 및 답변 신뢰도(환각 감소·출처 제시) 확보
- BMAD 표준 문서 체계 기반으로 신규 에이전트·서비스의 확장 가능한 플랫폼 기반 마련
Architecture
- AI/Agent: LangGraph 기반 Agent Orchestration(멀티 에이전트 아키텍처), 프롬프트 가드레일(민감정보 차단·개인정보 마스킹), 멀티턴 세션 관리
- RAG/검색: Vector RAG(Chunking 전략·Embedding·Vector DB), GraphRAG(Entity·관계 추출·지식 그래프), LLM Wiki, 하이브리드 검색(BM25 + Vector·Graph Traversal), BGE-Reranker 기반 Re-Ranking
- 데이터 파이프라인: Parsing Engine 기반 문서 구조화, 메타데이터(제목·출처·기준일·카테고리) 정의·표준화, 정형·비정형 데이터 통합
- Master Agent ↔ Sub Agent 호출 패턴 — 단일 통신(일반/LLM Wiki/BMAD Search/knowledge_app), 순차·병렬 멀티에이전트, 멀티턴 대화, 가드레일 5개 실행 패턴
- B2B 세일즈 자동화 — Account Plan Agent(DART·뉴스·나라장터 크롤링 → 기업 인텔리전스 분석 → Account Plan 초안 생성·CRM 저장), 영업활동 자동화 Agent(Teams/Outlook 감지 → 레코드 자동 생성·KOS-CRM 등록)