이 컨텐츠는 agentic ai 서비스를 프로덕션 환경에서 산업화하고 확장 가능하며 탄력적으로 만드는 방법에 대한 실용적인 접근 방식을 제시합니다. LLM의 한계를 극복하고 내구적인 실행, 오케스트레이션, 메모리 관리를 통해 실제 사용 사례에 적용하는 방법을 코드 데모와 함께 보여줍니다.
1. 발표 소개 1
발표자는 Alan이며, akka의 수석 솔루션 아키텍트이다. 13
오늘의 주제는 agentic ai에 대한 내용이다. 8
발표자는 어제 Duncan의 발표를 간단히 요약할 예정이다. 12
2. AI의 현재와 필요성 15
AI는 우리의 삶을 변화시키고 있으며, AI 어시스턴트는 자연어를 이해하고 대화형으로 작업을 해결하는 데 도움을 준다. 15
AI의 장점을 활용하기 위해서는 프로세스를 자동화할 필요가 있으며, 이를 위해 AI 에이전트가 필요하다. 18
LLM(대형 언어 모델)은 정적 지식을 가지고 있으며, 상태를 유지하지 않기 때문에 대화 기록을 관리할 수 없다. 20
LLM은 비결정적이며, 현재는 처리량이 낮고 비용이 많이 든다.
3. 소프트웨어 엔지니어링 원칙 27
프로세스를 최적화하기 위해 소프트웨어 엔지니어링 원칙과 솔루션을 사용해야 한다. 28
Agentic 서비스는 LLM의 지식을 확장하고, 다양한 도구를 호출할 수 있는 패턴을 제공한다. 29
4. Agentic 서비스의 특징 31
Agentic 시스템은 대화 세션을 관리하고, 실패를 수용해야 한다. 31
시스템 설계 시 실패를 모델링하는 것이 중요하다. 32
5. Agentic 서비스의 패턴 34
RAG(검색 증강 생성): LLM에 추가 정보를 검색하여 보완하는 패턴이다. 35
워크플로우: 정적 패턴으로, LLM이 비즈니스 프로세스를 조정하지 않는다. 37
에이전트: 동적 패턴으로, LLM이 조정을 수행한다. 39
6. 산업화의 요구사항 49
산업화된 시스템을 만들기 위해서는 보안, 확장성, 복원력, 관찰 가능성에 집중해야 한다. 49
에이전트 생애 주기를 관리하고, 자동으로 확장할 수 있어야 한다. 52
7. 오케스트레이션과 상태 관리 60
오케스트레이션은 상태를 유지하는 패턴을 구현해야 하며, 각 단계의 실행을 저장해야 한다. 60
통신의 느림을 고려하여 이를 처리할 수 있는 방법이 필요하다. 72
8. akka의 솔루션 76
akka는 AI 전문가가 아니지만, 10년 이상 분산 시스템을 구현해왔다. 76
akka는 내구성 있는 실행을 위한 플랫폼을 제공하며, 개발자에게 SDK를 통해 다양한 구성 요소를 제공한다. 84
9. 첫 번째 사용 사례: 인스턴스 해결 시스템 101
고객의 인스턴스 해결 시스템을 예로 들어, 결제 시스템에서 발생한 문제를 LLM을 통해 해결하는 방법을 설명한다. 101
LLM은 시스템 프롬프트와 대화 기록을 사용하여 문제를 해결하고, 필요한 도구를 호출한다. 108
10. 두 번째 사용 사례: RAG 기반 챗봇 217
내부 문서에 대한 질문을 처리하는 챗봇을 구현하는 방법을 설명한다. 219
시스템 프롬프트와 대화 기록을 사용하여 사용자 질문에 답변한다. 226
11. 세 번째 사용 사례: 실시간 비디오 271
미국 수화 인식 시스템을 실시간으로 구현하는 방법을 설명한다. 271
비디오 스트리밍과 LLM을 결합하여 실시간으로 피드백을 제공한다. 274
1. 🤖 에이전틱 AI 서비스의 산업화
에이전틱 AI 서비스의 산업화를 위해서는 생산으로의 전환에 필요한 요구사항과 청사진이 중요하다 11.
AI 기술은 우리의 삶을 변화시키고 있으며, AI 어시스턴트는 자연어를 이해하고 대화형으로 작업을 해결하는 역할을 한다 15.
LLM(대형 언어 모델)은 정적인 일반 지식을 가지고 있으며, 상태가 없고 비결정적이어서 세션 대화 기록을 유지할 수 없다 20.
2. 🤖 에이전틱 서비스의 구조와 필수 요소
에이전틱 서비스는 LLM의 상태성을 추가하여 대화 세션을 관리하고, 실패를 포용하는 특성을 가져야 한다. 이는 비결정론적인 루프에서 발생할 수 있는 실패를 수용해야 함을 의미한다. 29
일반적인 패턴으로는 검색 기반 생성(RAG)이 있으며, 이는 LLM과 추가 정보를 검색하는 기능을 결합하여 대화의 상태를 관리한다. 35
워크플로우는 정적이며 LLM이 비즈니스 프로세스를 오케스트레이션하지 않을 때 사용되는 패턴이고, 에이전트는 완전한 동적성을 갖추어 LLM이 오케스트레이션을 정의한다. 37
에이전트 라이프사이클을 관리하기 위해서는 이벤트 기반 패턴을 구현해야 하며, 이는 대화식 시스템의 특성을 반영해야 한다. 53
메모리 데이터베이스는 대화의 상태를 유지하기 위해 필요하며, 세션별로 데이터를 파티션하여 저장할 수 있는 방법이 필요하다. 이는 서비스의 생산 품질을 보장하는 데 중요하다. 72
3. 🛠️ 내구성 실행 및 분산 시스템 구현
10년 이상 내구성 실행과 대규모 분산 시스템구현에 중점을 두고 있으며, 이는 기업의 비즈니스 모델에 실패를 포함하는 관점을 채택하게 한다 78.
개발자에게 제공되는 SDK는 여섯 개의 높은 수준의 구성 요소를 포함하여 복잡한 아키텍처 패턴을 구축할 수 있게 해준다 84.
워크플로우 단계를 통해 신뢰성 있는 실행과 상태 복원(point-in-time recovery) 기능을 제공하며, 이는 실패 시 자동으로 복구된다 88.
장기 실행 및 시간 초과와 같은 기능을 갖춘 타이머, HTTP 및 gRPC로 데이터 스트리밍을 위한 엔드포인트, 그리고 다양한 속성으로 메모리를 쿼리할 수 있는 뷰도 지원한다 92.
개발자는 로컬 샌드박스 환경에서 이 도구들을 실험하고 디버그할 수 있으며, 배포는 자동화된 환경, 서버리스 환경 또는 자체 호스팅 방식으로 가능하다 95.
4. 🤖 AI 서비스 자동화 흐름 설계
사용자의 확인 요청 후, LLM은 작업 완료 시 시스템에 보고서를 반환하여 프로세스를 자동화할 수 있다. 141
워크플로우에는 대화 단계를 저장하고, 프롬프트를 저장하는 메모리 데이터베이스와 api 통합을 위한 도구가 포함된다. 146
각 사건에 대한 자동화된 워크플로우는 LLM의 요청에 따라 필요한 통합 단계를 실행하고, 성공적인 작업 완료 후 보고서를 생성한다. 149
LLM은 각 요청에 대해 실행 도구를 지정하고, 해당 도구의 워크플로우를 통해 정보를 수집하고 업데이트할 수 있다. 155
코드 구현은 각 단계의 정의와 함께 오류 처리 및 인간 개입 옵션을 포함하여 비즈니스 로직을 모델링하고 비즈니스에 맞춰 확장 가능성을 제공한다. 186
5. 🚀 AI 서비스 워크플로우 및 사용 사례
다양한 워크플로우를 구성하여 API 호출, 메시지 브로커통신, LLM(대규모 언어 모델)과의 연계 등을 유연하게 처리할 수 있다 207.
특정 정보에 대한 비공식적인 챗봇 시스템을 구축하기 위해, 내부 데이터베이스와 대화 기록을 제공해야 한다 220.
대화형 시스템 프롬프트를 사용하여 사용자 질문에 대한 응답을 진행하며, 필요한 경우 "죄송합니다, 도와드릴 수 없습니다."라는 표준 응답으로 대체할 수 있다 229.
귀하의 시스템 요구를 충족시키기 위해, 데이터를 임베딩하고 상태 변화를 관리하는 과정을 자동화해야 한다 231.
라이브 스트리밍 영상에서 미국 수화 인식을 담당하며, 시스템 프롬프트를 통해 올바른 수화 여부를 실시간으로 확인하고 피드백을 받을 수 있다 271.
5.1. ️ 도구 구현을 위한 워크플로우 설명
도구를 구현하기 위한 워크플로우의 예시가 제공된다. [206]
다양한 호출을 정의하여 정보를 API나 메시지 브로커로 전송하고, 관찰 결과를 초기 워크플로우로 다시 업데이트하는 과정이 설명된다. [207]
소비자와 생산자를 구현하는 두 가지 방법이 있으며, 메시지 브로커와의 연결이 용이하다고 언급된다. [211]
특정 인스턴스 ID에 대한 새로운 워크플로우가 생성되고, 이 워크플로우가 시작되는 과정이 강조된다. [213]
시스템에 정보를 되돌려 보내기 위해서는 상태 변화를 메시지로 변환하는 생산자가 필요하다. [214]
5.2. 챗봇 어시스턴트 구현 사례
특정 콘텐츠를 통한 챗봇 어시스턴트 구축 사례를 다룬다. 이 경우, 공공 정보 대신 비공식 정보를 사용하여 오픈 정보를 제공하지 않아야 한다. [218]
사용자 요청에 따라 문서에서 정보를 검색하기 위해서는 전문적 데이터베이스와 대화 기록을 포함한 자원을 제공해야 하며, 이에 대한 시스템 프롬프트가 필요하다. [225]
임베딩을 통해 프롬프트를 향상시키고, 사용자의 요청을 수용할 수 있는 에이전트를 구축하여 산출과 리턴을 관리한다. [230]
각 세션에 대해 인메모리 데이터베이스 인스턴스를 유지하고, 요청 및 응답을 스트리밍할 수 있는 HTTP 스트리밍 엔드포인트를 설정한다. [237]
구축한 챗봇 'Ask akka'를 통해 정보 검색을 수행하는 실습을 진행하며, 제한된 정보에 대한 요청이 있을 경우 적절한 응답을 제공하기 어려운 상황을 시뮬레이션한다. [240]
5.3. ️ 파일 처리 및 대화 저장 흐름
복잡성이 증가함에 따라, 다양한 자원과의 통합을 관리하는 단계가 필요하다. [249]
파일을 나열하고 임베딩을 수행하는 단계를 구현하여 다양한 파일을 처리한다. [250]
호출을 격리하여, 실패 발생 시 다른 전환을 수행할 수 있는 구조를 마련한다. [253]
임베딩 과정에서는 벡터 데이터베이스와 같은 다양한 도구를 활용할 수 있다. [254]
실패 시에는 파일 목록을 재시도하여 또 다른 단계를 진행할 수 있다. [255]
5.4. 실시간 비디오 및 ASL 인식 시스템
실시간 비디오 스트리밍을 통해 미국 수화(ASL) 인식을 수행하고자 한다. [270]
Gemini LLM을 활용하여 수화 인식을 진행하며, 시스템 프롬프트를 통해 사용자에게하는 질문을 보정한다. [272]
시스템 프롬프트는 대화 기록 대신 저장되며, LLM과의 상호작용을 위해 gRPC 스트림을 사용한다. [278]
비디오 스트리밍 중 사용자가 수화 문자를 질문하면 시스템이 그에 대한 응답을 제공하는 방식으로 작동한다. [288]
요청 처리 속도가 느릴 수 있으므로 백프레셔를 적용하여 요청을 효율적으로 관리해야 한다. [292]
5.5. AI 패턴 구현을 위한 플랫폼 개발 요약
프로덕션 그레이드 플랫폼이 필요하며, AI 패턴을 구현하기 위해 서로 다른 도구를 사용할 수 있어야 한다. [301]
실패를 수용하고, 실패를 모델링해야 하며, 플랫폼이 해결해야 할 회복력의 수준을 고려해야 한다. [304]
24-48시간 내에 개념 증명을 제공하며, 흥미로운 사례가 있다면 연락하라고 권장한다. [307]
백프레셔는 사용하는 스트리밍 라이브러리 내에서 구축되며, 여러 상태 기반 클라이언트를 통해 요청을 큐잉할 수 있다. [312]
LLM이 응답을 바탕으로 호출해야 할 도구를 오케스트레이션하며, 이를 통해 동적 실행이 가능하다. [347]
