# LinkedIn의 GenAI 애플리케이션 기술 스택 개발 과정

> Clean Markdown view of GeekNews topic #18078. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18078](https://news.hada.io/topic?id=18078)
- GeekNews Markdown: [https://news.hada.io/topic/18078.md](https://news.hada.io/topic/18078.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-12-03T10:16:01+09:00
- Updated: 2024-12-03T10:16:01+09:00
- Original source: [linkedin.com](https://www.linkedin.com/blog/engineering/generative-ai/behind-the-platform-the-journey-to-create-the-linkedin-genai-application-tech-stack)
- Points: 6
- Comments: 0

## Summary

2023년 초 LinkedIn은 GenAI 기능을 활용한 제품 포트폴리오를 출시하며, 초기 간단한 프롬프트 입력에서 대화형 에이전트 경험으로 발전시켰습니다. 기술 스택 구축 과정에서 Java와 Python을 활용하여 프레임워크를 개발하고, 프롬프트 관리, 작업 자동화, 컨텍스트 인식 및 개인화, 모델 추론 및 미세 조정 등의 기능을 통합했습니다. 사내용 GenAI 스택을 만들어야 할 경우 참고하시면 좋겠네요.

## Topic Body

- 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 에이전트로 이동함에 따라 새로운 기능 및 운영 요구 사항이 급증하고 있음. 이 내용도 추가로 공개 예정

## Comments



_No public comments on this page._
