
受注情報からぐるなびの店舗ページへのデータ連携を開発している有賀です。
「セキュリティとガバナンス確保を目的に社内独自AIチャットを構築」をテーマに生成AIの変化を実感した経験を記載します。
目次
社内用チャットツールの構築とリリース
昨今、多くの企業で生成AIの活用が進む中、弊社でも社員が安心して業務に利用できる環境整備が求められていました。2023年後半、生成AIブームの真っ只中で私たちは社内向けの独自AIチャットツールの構築プロジェクトを立ち上げました。
特にセキュリティや利用状況の可視化の観点から「社外秘情報を入力しても安心なChatGPT環境」の構築を目指しました。しかし2024年、Google GeminiやNotebookLMの登場により最終的にサービス廃止という決断に至りました。
プロジェクトの背景と課題
ChatGPTの登場により業務効率化の可能性が見えてきた一方で以下の課題がありました:
- セキュリティリスク: パブリックなChatGPTに機密情報を入力できない
- 利用状況の可視化: 誰がどのように使っているか把握できない
- 社内情報との連携: ナレッジベースやドキュメントと統合したい
- 外部からのアクセス制限: 不正なアクセスがされない環境を作る必要がある
要件整理
プロジェクト開始にあたり以下のように要件を整理しました:
| Requirements (要件) | Must-Haves (必須要件) | Should-Haves (あるべき要件) | Good-to-Haves (あると良い要件) |
|---|---|---|---|
| 社外秘情報を入力しても安心な環境をつくる | 社内アクセス限定 | 入力トークン上限を切り替えられるようにする | プロンプトの共有がしやすい(ワンクリック社内公開・共有) |
| 利用状況を可視化する | SSO(認証) | GPT-3.5と4をアカウント単位で切り替えられるようにする | RAG対応(Vertex AI Searchのような) |
| 外部からIPを制限し不正なアクセスがされない環境を作る | ChatGPTのUIに合わせる | 各種パラメータ(温度や最大トークン数)が調整できる | マルチモーダル |
| 普段の業務をChatGPTに置き換えることで工数を削減し、業務に専念できるようにする | 利用したプロンプトを記録(ログに出す) | Google Analytics以外の独自アクセス集計(ユーザー、日時、PV、実行回数の計測) | |
| 改善の意見収集 | モニタリング |
プロジェクトのゴール
- セキュアな環境: 社内ネットワーク内でのみアクセス可能
- ガバナンス: 利用ログの記録と管理
- 拡張性: 将来的にRAG(Retrieval-Augmented Generation)で社内文書検索に対応
アーキテクチャ概要
AWS Cloud Development Kit (CDK) v2 を用いてTypeScriptで定義されたアプリケーションのインフラストラクチャを構築しました。
アプリケーションはDockerコンテナとしてAWS Fargate上で実行され内部向けのApplication Load Balancer (ALB) を通じてアクセスされます。データストアとしてAmazon DynamoDB、コンテナイメージの管理にAmazon ECRを使用しています。
認証基盤として NextAuth.js と Azure Active Directory(現在はMicrosoft Entra ID)、外部AIサービスとして Azure OpenAI Service との連携が組み込まれています。
技術選定
コアフレームワーク
- Next.js (App Router)
- React
- TypeScript
スタイリング
- Tailwind CSS
- Framer Motion
- PostCSS
認証・セッション管理
- NextAuth.js
- @auth/dynamodb-adapter
- Azure Active Directory
AI/LLM
- OpenAI Edge
- LangChain
- Vercel AI SDK
インフラ(AWS)
- ECS on Fargate
- Application Load Balancer
- DynamoDB
- CloudWatch + Kinesis Firehose
Infrastructure as Code
- AWS CDK v2 (TypeScript)
アーキテクチャ特徴
- App Router ベースの Next.js アプリケーション
- API Routes でバックエンド機能実装
- DynamoDB でチャット履歴・セッション管理
- ストリーミング対応 のチャット機能
- AWS 環境 でのデプロイメント想定
技術的な実装のポイント
コードが載せられそうなところの抜粋になります。
1. 認証フローの実装
NextAuth.jsとAzure ADのOIDC連携によりシームレスな認証を実現しました。
// 認証設定のポイント providers: [ AzureADProvider({ clientId: process.env.AZURE_AD_CLIENT_ID, clientSecret: process.env.AZURE_AD_CLIENT_SECRET, tenantId: process.env.AZURE_AD_TENANT_ID, }) ]
- DynamoDBアダプターでセッション情報を永続化
- リフレッシュトークンによる自動再認証
- 権限グループによるアクセス制御
2. ストリーミングレスポンスの実装
ChatGPTライクなリアルタイムレスポンスを実現するためVercel AI SDKを活用しました。
// ストリーミングAPIの実装 export async function POST(req: Request) { const { messages } = await req.json(); const response = await openai.chat.completions.create({ model: 'gpt-3.5-turbo', messages, stream: true, }); return new StreamingTextResponse(response); }
- トークンごとに逐次表示、体感速度の改善
- マークダウンレンダリングでコードブロックやリストを見やすく
- コピーボタンでワンクリックコピー
3. チャット履歴の管理
DynamoDBのシングルテーブルデザインで効率的なデータ管理を実現しました。
スキーマ設計:
PK: userId#chatId SK: timestamp#messageId これにより、 - ユーザーごとの全チャット一覧取得 - 特定チャットの全メッセージ取得 が実行可能
4. インフラ
AWS CDKでインフラをコード管理
// ECSタスク定義の例 const taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef', { cpu: 256, memoryLimitMiB: 512, }); taskDefinition.addContainer('web', { image: ecs.ContainerImage.fromEcrRepository(ecrRepo), environment: { AZURE_OPENAI_API_KEY: azureApiKey, DYNAMO_TABLE_NAME: dynamoTable.tableName, }, logging: ecs.LogDrivers.firelens({ options: { Name: 'firehose', region: 'region', }, }), });
- GitOpsによる変更履歴の追跡
- レビュープロセスの標準化
DynamoDBはオンデマンドモードでアクセスパターンに応じた自動スケーリングで進めました。
転機:GeminiとNotebookLMの登場
上記のような形でリリースをしましたがほどなくしてGoogleから「Gemini」と資料分析に特化した「NotebookLM」が日本語対応されて登場したのです。
2024年の市場変化
Google Gemini: - Google Workspace統合で社内ドキュメント検索が容易 - エンタープライズグレードのセキュリティ
NotebookLM: - ドキュメント解析・対話が可能 - PDFやGoogleドキュメントを直接アップロード - ソース引用付きの回答生成
これらを検証した結果、以下の点が浮き彫りになりました。
決定的だった3つの要因
1. 運用負荷からの解放
外部サービス利用により: - インフラ監視が不要に - セキュリティパッチ対応が不要に - モデルアップデート対応が不要に
エンジニアは本業のプロダクト開発に集中できるようになります。
2. 機能面での圧倒的な差
自社システムで実装予定だった機能が既にGemini/NotebookLMで実現されていました:
- 社内文書検索: RAG機能を1から実装する必要がない
- ファイルアップロード: PDF、Word、Excelに対応済み
- マルチモーダル: 画像・動画解析も標準搭載
特にNotebookLMのドキュメント解析能力は社内規定やマニュアルの参照において我々がRAGで実現しようとしていたことを容易に達成してしまいました。
3. 高機能と利便性
セキュリティが担保されたGoogle Workspace環境下であれば情報の機密性を保ちつつ最新のAIモデルを即座に利用できます。
決断:自社ツールの廃止
「苦労して作ったものだから」というサンクコストにとらわれず私たちは冷静に判断を下しました。
廃止の意思決定
- 構築した社内用チャットツールは廃止する。
- 全社的にGeminiおよびNotebookLMの活用へシフトする。
自前での開発・運用にかかる人的リソースを削減しより進化したプラットフォームに乗ることで、社員は「ツールのメンテナンス」ではなく「AIを活用した業務改善」に集中できるようになります。
おわりに
生成AIを取り巻く環境の変化スピードが著しい現在、状況に合わせて柔軟に手段を変え適応しているかと思います。とはいえ、ツールが変わっても読み込ませる「社内データの質」が高ければ価値は出るのでドキュメント整理整頓や適切にデータを蓄積することは変わらぬ価値を持ち続けると考えております。
