- 2023年初頭、LinkedInはGenAI機能を活用する製品ポートフォリオの提供を開始
- 初期のGenAI製品は、単純な「プロンプト入力、文字列出力」から始まり、コンテキストメモリをサポートする対話型エージェント体験へと発展
- GenAIアプリケーション技術スタックの構築を通じて、Time to Marketと長期的なレバレッジのバランスを保つアプローチを実装
Genesis and Evolution
- 共通作業のための標準メカニズムを提供するフレームワークの構築が必要だった
- LinkedInのオンラインサービングスタックの大半がJavaでプログラムされていたため、当初は共有Javaミドルティアから開始
- ユースケースが増えるにつれ、このミドルティアが開発および運用のボトルネックとなり、複数のユースケース別Javaミドルティアサービスへ分割
- 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スタックと新スタックの両方に深い知識を持つエンジニアで構成されたリーンなチームが移行を担当
- 段階的アプローチを用いて、個々のコンポーネントを1つずつ移行
- シンプルで小規模なアプリから始め、複雑で大規模なアプリへ進行
- シニアエンジニアと新人Python開発者をペアにして、実務の中でPythonを学べるようにした
最後に
- 新しいGenAIアプリケーション技術スタックは、AIファースト開発を受け入れ、効率的かつ責任ある形でGenAIアプリを構築するための強固な基盤を整える
- 世界の労働力を構成するすべての人に経済的機会を提供するというビジョンの達成に重要な役割を果たすだろう
- まだ解決すべき課題は多く残っている
- 製品体験の最前線が対話型アシスタントからAIエージェントへ移るにつれ、新たな機能要件と運用要件が急増している。この内容も今後追加で公開予定
まだコメントはありません。