### プロジェクト概要
- **目的**: パーソルキャリア社員約6,000人を対象とした社内向け生成AIチャットサービスの開発を進めました。
- **チーム構成**: フロントエンドエンジニア2名、インフラエンジニア1名、私(フルスタックエンジニア兼テックリード)の4名のエンジニアで構成されています。開発以外にも、推進チームや分析チームと連携し、PMとの協働でプロジェクトを進行しています。週1回の開発定例MTGではファシリテーターとして、メンバーのタスク管理、進捗確認や課題解決をサポートしています。
### 自身の役割
- **技術面での貢献**: フロントエンド、バックエンド、インフラの各領域で実装や改善を担当しました。事業部側とのヒアリングや他チームとの認識合わせを通じて、要件定義、詳細設計、実装、コードレビューを一貫して実施し、プロジェクト全体を技術的にリードしています。
- **マネジメント面での貢献**: チームリーダーとして、開発全体のテックマネジメントを担当し、課題解決やプロジェクトの円滑な進行をサポートしています。また、他チームとの連携を密にし、プロジェクト全体のスケジュールと進捗管理を行なっています。
### 背景と課題
- **課題**: 社内にはルールベースのチャットボットしか存在せず、自由な形式で質問できるサービスがありませんでした。そこで、社内業務の効率化を目的として、全社員が生成AIを活用できる環境の整備が求められていました。
### 自身のバリューと成果
- **技術的工夫**: Azure基盤を活用し、LangChain、Azure OpenAI、Azure AI Searchを統合して生成AIを活用した社内チャットサービスを構築しました。GPT-3.5の最適化手法を導入し、高パフォーマンスを維持しつつ運用コストの削減に成功しました。現在は最新のAzure OpenAI GPT-4oへの移行も完了しています。
- **URL共有機能の実装**: 「個人プロンプトURL共有機能」を開発し、社員が自分のプロンプトテンプレートをURL形式で簡単に他のメンバーと共有できる仕組みを構築しました。これにより、効率的な知識共有と情報活用が促進され、操作の簡素化とデータ活用の幅が広がりました。また、共有されたプロンプトの利用状況をCosmos DBで追跡し、データに基づいた施策を推進できるようにしました。
- **プロンプトサジェスト機能**: AIに不慣れな社員のために、会話の流れに応じて次の質問を提案する「プロンプトサジェスト機能」を実装しました。これにより、生成AIとの対話がスムーズになり、AIの利用促進を図ることができました。Azure OpenAIの最新モデルGPT-4を活用し、精度の高い応答を実現しています。今後は、Structured Outputs機能の導入も検討し、さらなる効率化を目指しています。
- **社内文書検索機能の実装と改善**: RAG(Retrieval-Augmented Generation)を活用した社内文書検索機能を開発し、2024年3月にベータ版をリリース、9月には正式版をリリースしました。ベータ版では文書範囲や検索精度に課題がありましたが、正式版ではMicrosoft SharePointとAzure Blob Storageの連携を自動化するパイプラインを導入しました。さらに、ベクトル検索とフルテキスト検索を組み合わせたセマンティックハイブリッド検索を採用し、文脈に即した高精度な検索結果を提供しています。この機能により、非構造化データを含む膨大な社内文書から迅速に必要な情報を取得でき、業務効率化に大きく貢献しました。
- **LLM-as-a-Judge導入**: LLM-as-a-Judgeを導入し、生成された回答や検索結果を自動的に評価する仕組みを構築しました。これにより、データ処理のスケーラビリティを確保し、一貫性のある高精度なフィードバックが得られるようになりました。評価プロセスの効率化とリソースの最適化により、業務のさらなる効率化を実現しました。
- **データ連携の改善**: 社内のSharePointに保存された全社員向け文書を、Azure Blob Storageにリアルタイムで転送するパイプラインをAzure Functions上で構築しました。これにより、RAGを用いて全社の文書から迅速に回答を生成できる仕組みを整えました。
- **プロンプトテンプレート管理機能の強化**: キャリアアドバイザーやリクルーティングアドバイザーなど、業務フローに根ざしたプロンプトテンプレートを職種別に管理できる機能を追加しました。責任者とのヒアリングを複数回実施し、業務フローに必要なカテゴリーを定義、そのデザインをFigmaで作成し、仕様に落とし込みました。プロンプトテンプレートはSharePoint上のCSVファイルで管理し、データ同期によってユーザー権限の複雑性を回避しましたが、今後はアプリ上で権限管理を完結する仕様も検討しています。
- **技術負債の解消**: 初期構築段階ではNext.jsアプリケーションを一つのAzure App Service上にデプロイしていましたが、ファイルアップロード機能の追加に伴い、システムのリアーキテクチャを実施しました。具体的には、以下の改善を加えました:
1. **Azure App ServiceからAzure Container Appsへの移行**: コスト最適化とKubernetesによるスケール性、カスタマイズ性を強化するため、Azure App ServiceをAzure Container Appsに置き換えました。ゼロスケール機能により、効率的なリソース使用を実現しました。
2. **Next.js API Routeの分離**: ファイル解析やLLMとのチャット処理を担う部分を、FastAPIを用いてPythonベースで別サーバーに分離しました。これは、TypeScriptからPythonへの移行を通じて、Ragasなどのプロンプト評価ツールとの相性を考慮した結果です。
これらの技術負債の解消により、スケール性を向上させ、将来的な機能追加に対する柔軟性を確保しました。
- **成果**: 社内文書を活用した自動回答生成サービスを成功裏にリリースし、事業部とアナリティクスチームとの連携を強化しました。スケジュール通りのリリースを実現し、業務効率およびUXの向上に寄与しました。また、継続的なフィードバックを基に機能を改善し、社内での普及率を60〜70%まで向上させました。LLM-as-a-Judgeの導入により、評価プロセスのスケーラビリティや精度も向上し、業務効率化にさらに貢献しました。