Key Takeaways
그날은 세일즈포스 연중 최대 행사인 Dreamforce를 일주일 앞둔 9월 12일이었습니다. 평소처럼 슬랙(Slack)으로 업무를 보던 중, 제 매니저이자 소프트웨어 엔지니어링 부사장인 클레어 쳉(Claire Cheng)으로부터 메시지를 받았습니다. “로버트, 도와줄 일이 하나 있어요.”
“물론이죠,” 제가 대답했습니다. “설마 Dreamforce 기조연설에 들어갈 건 아니죠? 그건 일정이 좀 촉박할 것 같아서요.”
“기조연설 데모는 아니에요,” 그녀가 말했습니다. “Salesforce 이벤트 앱 건이에요. 마케팅 이벤트 기술 팀이 8월 26일부터 자체 개발한 AI 에이전트를 Agentforce 스택으로 마이그레이션하는 작업을 해왔는데, 여기에 검색 증강 생성(RAG) 기능을 추가하는 데 로버트의 도움이 필요해요.”
시간은 흘러 Dreamforce 첫날인 9월 17일이 되었습니다. ‘Ask Astro’라는 이름의 AI 에이전트를 탑재한 Salesforce 이벤트 앱이 정식 출시되었습니다. Ask Astro 에이전트는 참가자들이 FAQ를 기반으로 유용한 정보를 찾을 수 있도록 돕고, 사용자 일정을 관리하며, 검색 쿼리, 시간, 회의 요약 제공 여부, 세션 유형 등의 요소를 고려해 참석할 만한 세션을 추천해 주었습니다.
이 모든 일이 어떻게 가능했을까요? Dreamforce 개최 3주 전으로 돌아가, 우리가 어떻게 시작했는지 그리고 최신 기술을 활용해 어떻게 역대급 속도로 최초의 이벤트 에이전트를 구축했는지 그 과정을 살펴보겠습니다.
Agentforce 온보딩
소프트웨어 엔지니어링 아키텍트인 아무르 굽타(Amool Gupta)가 이끄는 마케팅 이벤트 기술 팀은 이미 한 달 동안 Salesforce 이벤트 앱의 사용자 경험을 재정의하는 데 매진해 왔습니다. 요컨대, 팀은 앱 내에 네이티브로 상주하며 사용자의 질문에 답할 뿐만 아니라, 직접 액션을 취해 일정 관리까지 도와주는 에이전트를 원했습니다.
처음에 팀은 OpenAI의 함수 호출(function-calling) 기능과 Heroku의 벡터 데이터베이스를 사용해 AI 에이전트를 구축했습니다. 하지만 빈번한 기능 추가 요청과 콘텐츠 업데이트로 인해 테스트와 튜닝 작업은 매우 고되었습니다. 이 작업은 Salesforce 리더십의 주목을 끌었고, 리더들은 팀에 Salesforce의 진정한 저력을 보여줄 것을 제안했습니다. 즉, Agentforce 서비스 에이전트와 Data Cloud RAG를 도입하라는 도전 과제를 준 것입니다. 이는 기업이 보유한 정형 및 비정형 독점 데이터를 활용해 생성형 AI를 더 신뢰할 수 있고 관련성 있게 만드는 AI 프레임워크입니다.
우리는 이 도전을 받아들였습니다. 결국 “AI를 직접 만들(DIY)려 하지 마세요. 우리가 여러분의 여정을 도울 준비가 되어 있습니다”라는 메시지를 전하는 Agentforce 테마의 Dreamforce에서, 실제 Agentforce와 RAG를 직접 사용하는 것보다 더 나은 증명은 없을 테니까요.
Agentforce 제품 매니저인 앤드류 클로슨(Andrew Clauson)이 에이전트 로직을 Agentforce 구성으로 전환하는 작업을 주도했습니다. Apex 클래스에서 벡터 데이터베이스 호출이 구현되고 Apex 액션이 추가되자, 3개의 주제와 12개의 액션을 갖춘 Ask Astro 에이전트가 시스템에 빠르게 모습을 드러냈고 테스트 질문들에 훌륭하게 답변하기 시작했습니다.
그렇게 Dreamforce를 향한 카운트다운이 시작되었습니다.
Agentforce 알아보기
Agentforce 에이전트는 직원과 고객에게 24시간 중단 없는 지원을 제공합니다. 에이전트가 오늘날 여러분의 기업에 어떤 도움을 줄 수 있는지 확인해 보세요.
최소 기능 제품(MVP): Dreamforce까지 단 5일
검색 증강 생성(RAG)의 구현은 언제나 데이터에서 시작됩니다. 우리는 우선 Dreamforce 세션 데이터를 Data Cloud로 수집한 뒤, Data Cloud 기술 스택을 활용해 현재의 ‘Ask Astro’ 상태를 재현할 수 있는 최소 기능 제품(MVP)을 만들 수 있는지 확인해야 했습니다. 마침 팀 슬랙 채널 캔버스에 모든 세션 정보가 담긴 all-dreamforce-sessions.csv파일이 있었는데, 이는 완벽한 출발점이 되었습니다.
데이터
Data Cloud에 데이터를 가져오는 방법은 수백 가지가 있겠지만, 가장 선호하는 방식인 CSV에서 직접 데이터 모델 생성하기를 선택했습니다. 코어 시스템에서 커스텀 오브젝트를 만들고, CSV로 업로드한 뒤, 온갖 권한 세트를 조정하는 과정과 비교하면 시간 소모가 거의 없었습니다.
검색 인덱스
다음으로 Data Cloud의 비정형 데이터 의미론적 검색(Unstructured Data Semantic Search) 기능을 사용해 벡터 인덱스를 생성한 뒤 식사 휴식을 가졌습니다. 돌아와 보니 벡터 인덱스는 이미 저를 기다리고 있었습니다.
검색 증강 생성(RAG)
설정은 간단했습니다. 더 어려운 부분은 데이터를 검색해서 에이전트에게 전달하는 과정이었습니다. 제가 이 작업을 시작했을 때, 에이전트는 이미 API를 통해 자체 구축된 벡터 데이터베이스 솔루션과 통합되어 있었습니다. 또한 우리 수석 아키텍트가 이미 Heroku API를 사용하기 위한 Apex 클래스를 작성하여 이를 에이전트 액션으로 노출해 둔 상태였습니다.

저는 Data Cloud의 의미론적 데이터를 사용해 프롬프트 템플릿을 접목하는 노코드 솔루션인 리트리버(Retriever)의 엔지니어링 아키텍트입니다. 하지만 당시 우리가 작업 중이던 기능 세트가 Ask Astro 에이전트가 실행되는 운영 환경에는 아직 배포되지 않은 상태였습니다.
그래서 저는 우리 팀의 쿼리 서비스 커넥트 API를 직접 활용하기 위해 별도의 Apex 클래스를 작성해야 했습니다. Apex 코드 생성 LLM의 도움을 받아 Apex 클래스를 구현하고, ‘로버트 테스트 에이전트’를 만드는 데 약 30분밖에 걸리지 않았습니다. 이 테스트 에이전트는 기존 Ask Astro 에이전트의 주제 지침과 다른 모든 액션을 그대로 복제하되, 기존의retrieverSessions 액션만 제가 새로 만든 로 교체한 것이었습니다.retrieveSessions_DataCloud

MVP
우리의 MVP가 완성되었습니다. 저는 새로운 에이전트에게 화요일에 열리는화요일에 열리는 마크 베니오프(Marc Benioff)의 세션 을 물어보았습니다. 에이전트가 올바른 주제(세션 관리)와 액션(DataCloud에서 세션 검색)을 선택하는지, 그리고 제가 만든 Apex 클래스에 정확한 파라미터(searchTerm = “Marc Benioff”, 화요일을 나타내는 startsBetween)를 전달하는지 확인했습니다. 세션 시간은 당시 UTC 기준이었고 아직 시간대(Time zone) 지원을 준비하기 전이었지만, 약간의 다듬기만 거치면 충분해 보였습니다. 저는 슬랙에 “MVP 테스트 준비 완료”라고 메시지를 남기고 하루를 마쳤습니다.

하이브리드 검색과 인덱스 강화: Dreamforce까지 4일
아침에 일어나 보니, 에이전트가 이미 80% 수준까지 완성되었다는 팀원들의 피드백이 슬랙에 올라와 있었습니다. 우리 제품 매니저는 액션 설명에 정교한 프롬프트 마법을 부려 시간대 문제를 해결해 놓았더군요.
IMAGE 6

겨우 반나절 만에 프로젝트를 완수한 것처럼 보이시죠? 하지만 이제 해결해야 할 과제가 남았습니다. 바로 발표자 이름 검색의 정확도를 높여서, 누군가 “아담 에반스(Adam Evans)”를 검색했을 때 다른 ‘아담’, ‘아담스’, 혹은 ‘에반스’라는 이름이 포함된 세션이 결과에 나오지 않도록 하는 것이었습니다.
이름 검색 최적화는 생각보다 훨씬 어려웠습니다. 그 이유는 발표자 이름이 벡터화되는 전체 세션 정보의 아주 작은 부분일 뿐이었고, ‘아담’이나 ‘아담스’라는 이름을 가진 발표자가 너무 많았기 때문입니다. 벡터 검색(Vector search)만으로는 한계가 있었습니다.
다행히 우리 검색 팀이 구원투수로 나섰습니다. Data Cloud에서 베타 기능으로 제공되던 하이브리드 검색(Hybrid search)이 큰 도움이 되었습니다. 벡터 검색은 의미론적 유사성과 맥락을 잘 파악하지만, 특정 도메인의 고유 어휘를 식별하는 데는 약점이 있습니다. 반면, 키워드 검색(Keyword search)은 어휘적 유사성에는 탁월하지만 맥락을 읽지 못하죠. 하이브리드 검색은 의미를 파악하는 벡터 검색의 강점과 키워드 검색의 정밀함 및 속도를 결합하여 두 세계의 장점만을 제공합니다.
여기에 더해, 우리 팀이 작업 중이던 증강 인덱싱(Augmented indexing)이라는 개선 사항도 적용했습니다. 이는 방대한 데이터를 더 작고 관리하기 쉬운 덩어리로 나누고, 각 덩어리에 특정 쿼리 유형—이 사례의 경우 “발표자 이름으로 검색”—에 최적화된 정보를 포함시키는 기술입니다.
그 과정은 들리는 것보다 훨씬 간단했습니다. 제가 해야 할 일은 세션 데이터에서 모든 발표자 정보를 추출한 뒤, 각 발표자별로 아담 에반스, AI 플랫폼 클라우드 수석 부사장, Salesforce 와 같은 형태의 데이터 덩어리(Chunk)를 하나씩 만드는 것뿐이었습니다. 이런 형태의 데이터는 아담 에반스 혹은 Adm Evens 와 같이 오타가 섞인 유사한 쿼리가 들어왔을 때, 키워드 점수는 매우 높게 나오고 벡터 점수는 적절한 수준으로 나오게 됩니다. 이렇게 증강된 데이터 덩어리가 매칭되면, 우리는 전체 세션 정보를 생성형 AI(LLM)에 전달하여 검색 증강 생성(RAG) 과정을 거치게 했습니다.
스트리밍 서비스: Dreamforce까지 3일
테스트 파트너들이 최적화된 검색 인덱스에 만족했기에, 우리는 다음 단계로 넘어갔습니다. 바로 업데이트되는 세션 일정과 발표자 약력을 동기화하기 위해 검색 인덱스를 주기적으로 갱신하는 것이었습니다. Data Cloud 검색 인덱스는 스트리밍 업데이트를 기본적으로 지원하기 때문에, 관련 데이터 스트림의 모든 변경 사항이 거의 실시간으로 검색 인덱스에 동기화됩니다. 과제는 ‘이 파이프라인에 업데이트 데이터를 공급할 반복 갱신 로직을 어떻게 추가하느냐’였습니다.
이때 소프트웨어 엔지니어 락슈미 시바 칼람(Lakshmi Siva Kallam)이 슬랙 채널에 합류했습니다. 그의 팀은 이미 MuleSoft와 협력하여 Ingestion API와 Anypoint Connector를 Data Cloud로 가져오는 작업을 시범 운영 중이었습니다. 저는 벤더의 세션 API 출력값을 원하는 형식으로 변환하는 Java 코드를 작성했습니다. (LLM의 도움 덕분에 이 방대한 양의 JSON 처리를 단 45분 만에 끝낼 수 있었습니다.) 그 후 락슈미는 MuleSoft Anypoint Studio에서 변경 데이터 캡처를 지원하는 반복 데이터 수집 파이프라인을 구축하고, 이를 새로운 데이터 스트림으로 배포했습니다. 우리는 새 인덱스를 생성한 뒤, 벤더 시스템에서 일부 발표자를 삭제하고 우리 자신을 테스트 발표자로 추가해 보았습니다. 몇 분 정도 기다린 후 이름을 검색했고, 결과는 성공적이었습니다.

지식 액션: Dreamforce까지 2일
세션 데이터 인덱싱의 성공에 고무된 우리는 시니어 리더들에게 ‘Ask Astro’의 모든 경험을 새로운 Agentforce 및 Data Cloud RAG 에코시스템 위에서 운영할 수 있다고 설득했습니다. 마침내 승인이 떨어졌고, 우리는 FAQ 스프레드시트를 지식 문서(Knowledge Articles)로 변환한 뒤, ‘지식으로 질문 답변하기‘ 액션을 사용하여 FAQ 응답을 노출했습니다. 이로써 마케팅 이벤트 기술 팀은 네이티브 Salesforce Lightning Knowledge 인터페이스를 통해 FAQ 문서의 버전을 관리하고, ‘인덱스 재구축(Rebuild Index)‘ 버튼 하나로 에이전트의 지식 베이스를 즉시 갱신할 수 있게 되었습니다.
배포: Dreamforce까지 1일
모든 워크스트림에서 테스트, FAQ 콘텐츠 업데이트, 그리고 미세한 프롬프트 조정이 하루 종일 이어졌습니다. LLM 기반 에이전트와 에이전트 빌더 덕분에 디버깅 주기는 30초 내외로 매우 짧았습니다. 하루가 저물어갈 무렵, 마침내 그 순간이 왔습니다. Data Cloud 버전의 ‘Ask Astro 에이전트’ 를 동료들에게 공개하고, 다음 날 Dreamforce 참가자들에게 선보여도 좋다는 승인을 받았습니다.
아래는 온라인에 배포된 당시 Ask Astro 에이전트의 데이터 흐름도입니다.

Dreamforce에서의 모니터링
Einstein 피드백 기능을 활성화함으로써, 우리는 참가자들이 Ask Astro 에이전트와 어떻게 상호작용하는지 실시간으로 추적하고 FAQ의 어느 부분을 개선해야 할지 파악할 수 있었습니다. 수집된 피드백 데이터는 World Tour나 TDX 같은 다음 Salesforce 행사에서 에이전트의 성능을 더욱 높이는 데 귀중한 자산으로 활용될 예정입니다.
시사점
우리는 오픈 소스 스택 기반의 자체 개발 AI 애플리케이션을 단 며칠 만에 Salesforce 스택으로 마이그레이션했습니다. 이 과정에서 Agentforce와 Data Cloud가 제공하는 모든 최신 기술이 활용되었습니다:
- MuleSoft Anypoint Studio
- Data Cloud Ingestion API
- DLO(데이터 레이크 오브젝트) => DMO(데이터 모델 오브젝트) 매핑
- 증강된 데이터 덩어리(Augmented chunks)를 포함한 Data Cloud의 벡터/하이브리드 인덱스
- 하이브리드 검색 리랭커(Re-ranker)로 강화된 Data Cloud 쿼리 서비스
- Atlas 추론 엔진
- 지식으로 질문 답변하기 액션
- 에이전트 빌더
- 사용자 일정을 업데이트하기 위한 호출 가능 액션 프레임워크
- 에이전트를 모바일 애플리케이션과 연결하는 봇 API (Bot API)
- Einstein 피드백
이 과정을 통해 우리는 오픈 소스 스택으로는 도저히 따라올 수 없는 방식으로 구성 가능성, 디버깅 능력, 그리고 무엇보다도 생산성을 크게 향상시켰습니다. 다음 행사에서는 더욱 강력해진 Ask Astro 에이전트를 확실히 만나보실 수 있을 것입니다.
Atlas 추론 엔진이 Agentforce를 구동하는 방법
자율적이고 선제적인 AI 에이전트는 Agentforce의 핵심입니다. 그렇다면 어떻게 작동할까요? 그 내부를 자세히 들여다보겠습니다.
궁금한 점은 언제든 문의주세요.
전문가가 도움을 드리겠습니다.
