- 2023년 초, LinkedIn은 GenAI 기능을 활용하는 제품 포트폴리오를 출시하기 시작함
- 초기 GenAI 제품은 간단한 "프롬프트 입력, 문자열 출력"에서 시작하여 컨텍스트 메모리를 지원하는 대화형 에이전트 경험으로 발전
- GenAI 애플리케이션 기술 스택 구축을 통해 타임투마켓 과 장기 레버리지 간의 균형을 유지하는 접근 방식을 구현
Genesis and Evolution
- 공통 작업을 위한 표준 메커니즘을 제공하는 프레임워크 구축이 필요했음
- 대부분의 LinkedIn 온라인 서빙 스택이 Java로 프로그래밍되어 있어 초기에는 공유 Java midtier로 시작함
- 사용 사례가 증가함에 따라 이 midtier가 개발 및 운영 병목 현상이 되어 여러 사용 사례별 Java midtier 서비스로 분할함
- AI 엔지니어는 오프라인 LLM 기반 워크플로, 프롬프트 엔지니어링 및 평가에 Python을 선호함
- 단기적으로는 단편화된 온라인 및 오프라인 스택을 유지하되, 장기적으로는 Python을 온라인 서빙에도 사용하기로 결정함
- LangChain 오픈소스 프로젝트를 기반으로 온라인 서빙용 Python 프레임워크 구축
- Python에 중점을 두고 핵심 인프라 종속성에 대한 Python 지원 활성화 프로젝트 시작
- 현재 GenAI 애플리케이션 프레임워크는 LangChain 위에 구축된 얇은 래퍼임
프롬프트 관리
- 프롬프트 엔지니어링은 LLM을 "프로그래밍"하는 주요 메커니즘임
- 초기에는 코드에서 수동 문자열 보간을 사용했지만 오류가 발생하기 쉽고 확장이 불가능했음
- Prompt Source of Truth 컴포넌트 도입하고 Jinja 템플릿 언어 사용 표준화
- 프롬프트 해상도 라이브러리를 Java에서 Python으로 다시 작성
- 대화형 UI가 등장함에 따라 대화에서 인간과 AI의 역할에 대한 더 많은 구조 제공
- 최종적으로 OpenAI Chat Completions API로 수렴
스킬을 통한 작업 자동화
- 스킬 추상화를 GenAI 애플리케이션으로 확장하여 작업 자동화 메커니즘으로 사용
- 초기에는 LLM 친화적인 JSON 스키마를 사용하여 LinkedIn 내부 및 외부 API를 래핑하는 사용자 지정 코드로 구축됨
- 스킬 중복 구현, 다운스트림 스킬 변경, 개발자의 수동 스킬 지정 등의 문제 발생
- Skill Inversion 개념 도입하여 다운스트림이 스킬을 정의하고 호출 앱에 노출하도록 함
- 중앙 집중식 스킬 레지스트리 서비스, 빌드 플러그인, 동적 LangChain 도구 등 스킬 액세스, 개발 및 운영 프로세스 간소화
- 점진적으로 모든 API에 대한 스킬 추상화를 생성하여 LLM이 원활하게 상호작용할 수 있도록 기술 스택 진화 중
컨텍스트 인식 및 개인화
- LLM이 기본적으로 stateless하기 때문에 컨텍스트 인식과 개인화가 어려움
- 초기에는 Couchbase나 Espresso DB를 스토리지로 사용하고 각 팀이 DB 설정, 쓰기/읽기 등을 담당함
- LLM 컨텍스트 윈도우가 제한적이므로 의미 검색(임베딩 사용)과 요약 기능이 필요해짐
- LinkedIn 메시징 스택을 활용하여 대화 메모리 인프라 구축
- 사용자-애플리케이션 상호 작용 경험을 기반으로 파생된 Experiential Memory 개념 도입
- GenAI 애플리케이션 프레임워크에 통합하여 개발자가 원활하게 사용할 수 있도록 지원
모델 추론 및 미세 조정
- 초기에는 Azure OpenAI 서비스에서 제공하는 LLM만 사용함
- LinkedIn 특정 작업을 위해 미세 조정된 Llama와 같은 LLM이 상용 모델과 비슷하거나 더 나은 품질을 보임
- 외부 및 내부 모델에서 애플리케이션 개발자 경험을 투명하게 하기 위해 노력 중
- 추론 계층은 모든 LLM에 OpenAI Chat Completions API를 노출함
- 애플리케이션 프레임워크의 구성 훅을 통해 온프레미스 및 외부 모델 간 쉽게 전환 가능
마이그레이션
- 레거시 맞춤형 솔루션에서 표준화된 솔루션으로 신속하게 마이그레이션하는 것이 중요함
- Java 스택과 새로운 스택에 대한 깊은 지식을 가진 엔지니어로 구성된 린 팀이 마이그레이션을 처리함
- 점진적 접근 방식을 사용하여 개별 구성 요소를 하나씩 마이그레이션함
- 간단하고 작은 앱부터 시작하여 복잡하고 큰 앱으로 진행
- 선배 엔지니어와 신입 Python 개발자를 페어링하여 실무에서 Python을 배울 수 있도록 함
최종 생각
- 새로운 GenAI 애플리케이션 기술 스택은 AI 우선 개발을 수용하고 효율적이고 책임감 있게 GenAI 앱을 구축하기 위한 탄탄한 기반을 마련함
- 전 세계 인력의 모든 구성원에게 경제적 기회를 제공하려는 비전 달성에 중요한 역할을 할 것임
- 아직 해결해야 할 과제가 많이 남아 있음
- 제품 경험의 최첨단이 대화형 어시스턴트에서 AI 에이전트로 이동함에 따라 새로운 기능 및 운영 요구 사항이 급증하고 있음. 이 내용도 추가로 공개 예정