762 Views
February 13, 25
スライド概要
事業に向き合う社内ライブラリは往々にして複雑なコンテキストを持ちます。そしてその複雑性は、ライブラリの活用を推進する事の妨げにもなります。DeNA のゲーム事業ではこの課題に対し、ボトムアップでゲーム開発用の内製ライブラリの知識を持つ AI チャットボット「Rinchan」を開発しました。
Rinchan が社内ライブラリに関する質問に答えることで、ゲーム開発者に対するライブラリ開発者のサポート業務の工数は大きく削減されました。月15件以上のライブラリ利用者からの質問を AI が処理するなど、大きな成果を上げています。
本講演では、Rinchan の開発背景と概要、Gemini の特徴を活かした Many-Shots In-Context Learning によるシンプルで強力な実装手法、ユースケースに応じた具体的な回答例などを紹介し、Rinchan の取り組みとその直接的な成果を解説した上で、
Rinchan がもたらした変革として、ドキュメントの価値を高めるサイクルの実現や、利用者に芽生えた意識変化などを挙げ、事業に向き合う現場からボトムアップで主体的に AI 開発を行うメリットと重要性を明らかにします。
◆ チャンネル登録はこちら↓
https://www.youtube.com/c/denatech?sub_confirmation=1
◆ X(旧Twitter)
https://x.com/DeNAxAI_NEWS
◆ DeNA AI
https://dena.ai/
◆ DeNA Engineer Blog
https://engineering.dena.com/blog/
◆ DeNA × AI Day ‖ DeNA TechCon 2025 公式サイト
https://techcon2025.dena.dev/
DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。
社内ライブラリ特化の チャットAIが起こす、開発現場での変⾰ ゲームサービス事業本部開発運営統括部 ⼤⽵ 悠⼈ 1 © DeNA Co., Ltd.
⾃⼰紹介 ⼤⽵ 悠⼈ (Haruto Otake) エンジニア モバイルゲームの開発効率を ⾼めるための様々な仕組み作りに 継続的に取り組んでいます。 2 © DeNA Co., Ltd.
アジェンダ 1. ハイコンテクストな社内ライブラリの課題 2. 社内ライブラリ特化のチャットAI “Rinchan” による解決 3. “Rinchan” が起こした開発現場での変⾰ 3 © DeNA Co., Ltd.
ハイコンテクストな社内ライブラリの課題 4 © DeNA Co., Ltd.
社内ライブラリは何を⾏うのか? 社内ライブラリや社内システムは 社内の複雑なコンテクストの 課題解決を⾏うことが存在意義 社内で開発されているだけでは 意味がない 5 © DeNA Co., Ltd.
複雑な課題解決が意味すること 複雑なコンテキストの下にある課題を 解決するシステムは相応の複雑性を持つ 6 © DeNA Co., Ltd.
DeNA の複雑な社内ライブラリの実例 ● マスタデータ統⼀スキーマ⾔語 ”Muscle” ○ モバイルゲームのマスタデータのスキーマを定義する、 Protocol Buffers ベースのドメイン特化⾔語 (DSL) ○ マスタデータの⼊⼒から読み込みまで マスタデータに関する全ての記述を⼀元的に⾃動⽣成し、 社内外の様々なシステム⽤のマスタ定義を⼀元的に扱う ○ スキーマへの様々なアノテーション記述によって、 細かな挙動を制御できる 7 © DeNA Co., Ltd.
Muscleが利⽤者へ要求すること ● 扱う複数の対象のシステム / ワークフローに関する知識 ● DSL⾔語としてのベースであるProtocol Buffers の基礎知識 ● 多様なアノテーションのユースケースに応じた使い分け 8 © DeNA Co., Ltd.
ドキュメントは銀の弾丸ではない ドキュメントは絶対に必要だが、 読み⼿がドキュメントの理解に 要するコストは⾮常に⾼く、 書き⼿の期待程には読まれない 9 © DeNA Co., Ltd.
ユーザに寄り添った導⼊⽀援が⾮常に重要 低い敷居で気軽に相談してもらい、 親⾝になって⽀援していくべき。 それには、多⼤な⼯数が継続的に必要... ⼯数が多くかかると、ユーザも 敷居が⾼いように感じてしまう 10 © DeNA Co., Ltd.
仮説 社内ライブラリに特化したチャットAI がいれば、 効果的な導⼊⽀援を効率的に実現可能になり、 エンジニアの能⼒を エンパワメントできるのでは? 11 © DeNA Co., Ltd.
社内ライブラリ特化のチャットAI “Rinchan” による解決 12 © DeNA Co., Ltd.
”Rinchan”とは DeNA の社内ライブラリに 特化した知識を持つチャットAI 13 © DeNA Co., Ltd.
”Rinchan”の動作形態 Google Cloud Platform の Generative AI on Vertex AI の Gemini 1.5 を⽤いて実現。 Slack App として動作する 14 © DeNA Co., Ltd.
”Rinchan”での課題解決例 講演での読みやすさのために、 400⽂字以内に制限させた回答例を紹介 本来はサンプルコードも含む より詳細な回答が可能 15 © DeNA Co., Ltd.
作業⼿順を訊く Muscleをアップデートする にはどうしたらいいですか? 16 Muscleをアップデートするには、以下の手順に従ってください。 1. Muscle.Compilerのアップデート: dotnet tool update Muscle.Compilerコマンドを実行して、Muscle.Compilerを最 新バージョンにアップデートします。 2. インクルードディレクトリのアップデート : dotnet Muscle.Compiler setup_schema_project コマンドを実行し て、インクルードディレクトリを最新バージョンにアップデートしま す。 3. スキーマの再コンパイル: dotnet Muscle.Compiler compile_master_memoryおよび`dotnet Muscle.Compiler compile_takasho_importer`コマンドを 実行して、スキーマを再コンパイルします。 4. Oyakataへのスキーマ反映: dotnet Muscle.Compiler compile_oyakata_requirementおよび`dotnet Muscle.OyakataSync sync`コマンドを実行して、Oyakataに スキーマを反映します。 5. ゲームコードのアップデート : 必要に応じて、ゲームコードを アップデートして、新しいMuscleの機能を利用できるようにしま す。 これらの手順を実行することで、Muscleを最新バージョンにアッ プデートし、新しい機能を利用できるようになります。 © DeNA Co., Ltd.
ユースケースから適切な機能と使い⽅を訊く 開発中の機能を、他の メンバーに影響がないように 段階的にテストするには どうしたらいいですか? 17 Muscleの機能トグルと行機能トグルを活用します。 1. 機能トグルで開発ブランチ用の機能を定義 : 開発開始時 に、新機能用の機能トグル(例: new_feature)をMuscleス キーマに追加します。 2. 機能トグルを限定的に有効化: 開発ブランチのコード生成 時のみ`--use-feature`オプションで`new_feature`を有効化 します。他のブランチではこの機能トグルは無効なままです。 3. 新機能のスキーマ/データを機能トグルで保護: 新機能に 関するテーブル/カラム/行定義には`required_feature: ["new_feature"]`を指定します。これにより、`new_feature` が有効なブランチでのみ新機能が認識されます。 4. 行機能トグルでテストデータを分離 : 既存テーブルにテスト データを追加する場合は、行機能トグルを使って `new_feature`を指定します。これにより、`new_feature`が 有効なブランチでのみテストデータが読み込まれます。 この手順により、開発ブランチ以外への影響を抑えつつ、新機 能を段階的に開発・テストできます。 © DeNA Co., Ltd.
状況から注意点を指摘させる リリース後の新しいバージョ ンで、テーブルAの新規追加 と、既存テーブルBへのテー ブルAのレコードを参照する カラム追加を⾏いたいです。 このときに気をつけるべきこ とを教えて下さい。 18 1. テーブルAの定義に`required_version`を指定する: 新 バージョンに対応する数値を指定し、旧バージョン向けの出力 にテーブルAが含まれないようにします。 2. テーブルBの参照カラムに`required_version`を指定す る: テーブルAと同様に、新バージョンに対応する数値を指定 します。 3. テーブルBの既存データへの対応: 参照カラムは旧バー ジョンでは存在しないため、空欄を許容する必要があります。 `can_empty_condition`に`WhenNotAvailable`を指定す ることで、新バージョン以降のデータ入力時に空欄を許容しな いようにできます。 4. リレーション設定とバリデーション : テーブルBの参照カラ ムからテーブルAへのリレーションを設定し、参照整合性を検 証するバリデーションを生成します。これにより、存在しない テーブルAのレコードを参照することを防ぎます。 これらの設定により、新バージョンと旧バージョンの互換性を 保ちつつ、安全にテーブルとカラムを追加できます。 © DeNA Co., Ltd.
DSLのコードを出⼒させる
「カラムAの値が特定の値の
場合、カラムBの値を0に限
る」といった内容のバリデー
ションをMuscle DSLの
validationで記述するとどの
ような内容になりますか?
19
カラムAの値が100の場合、カラムBの値を0に限るバリデー
ションは、以下のように記述できます。
message Example {
int64 A = 1;
int64 B = 2 [(muscle.field) = {
validations: {
when: {
field: "A"
condition: { equal: { long: 100 } }
}
condition: { equal: { long: 0 } }
message: "Aが100の場合、Bは0である必要があります"
}
}];
}
when句でカラムAの値が100であることを条件とし、その場合
にのみカラムBの値が0であることを検証するバリデーションを
定義しています。
© DeNA Co., Ltd.
”Rinchan”は⾮常に⾼い性能を誇るチャットAI いずれも質問ごとの直接的な回答は 学習させていない。 リファレンスや構⽂情報などの 事実ベースの資料を学習し、 包括的に理解して回答している 20 © DeNA Co., Ltd.
In-Context Learningによる包括的な知識の学習 ● Geminiの最⻑2Mトークンの ロングコンテキスト性能を活かし、 対象のライブラリの全ドキュメントを プロンプトとして送る ○ = Large Context ICL ● RAGよりも精度の⾼い回答が可能 ● RAGが苦⼿とする、包括的な知識が必 要な質問も問題なく扱える ● ⾮常にシンプルなシステム構築が可能 ● 学習対象の更新が即座に完了する 21 # ドキュメント ## 言語仕様 .md 言語仕様ドキュメント ## コンバータ .md コンバータドキュメント ## コンパイラ .md ## ランタイム API.md … # 以下は質問文 Muscleの概要を 教えて下さい © DeNA Co., Ltd.
2Mのコンテキストウィンドウの規模感 ● 2MトークンはDeNAクライアント基盤で開発している主なライブラリの 全ドキュメントを同時に⼊⼒として扱えるほどの膨⼤なサイズ ● クライアント基盤の主なライブラリの全ドキュメント : 計700K程度 ○ Muscleの⾔語仕様を含む全ドキュメント : 91 K ○ 他のライブラリの各ドキュメント : 5K~20K 22 © DeNA Co., Ltd.
シンプルなシステム構成 ● 全てGoogle Cloud 上に構築 ● ドキュメントは全て Cloud Storageのバケット上に格納 ● 質問⽂に対するキーワードマッチで 質問対象のライブラリを特定 ● ライブラリに応じた特定ディレクトリ以下の 全てのドキュメントを、全てプロンプトに含める 23 © DeNA Co., Ltd.
”Rinchan”の実現上の課題 LLMでのチャットAI共通の最重要課題は ハルシネーションによる誤回答 性能が⾼いといえど、誤回答は発⽣する 24 © DeNA Co., Ltd.
オープンチャット上で有識者がファクトチェック ● オープンチャット上でのみ提供し、有識者にも質問と回答を⾒せる ● 有識者がファクトチェックすることで、ハルシネーションを⼀定許容 25 © DeNA Co., Ltd.
ファクトチェック前提の運⽤のコストと効果 ● ⼤体の問題をAIで解決できれば、⽬的は果たせる ● ゼロから解答を作るのに⽐べれば間違いを指摘することは容易 ○ チェックコストを加味しても最終的なサポートコストは削減できる ● 利⽤者の代理で有識者が “Rinchan” に対して質問する使い⽅では、 サポート業務で記述する⽂書量を劇的に削減できる ● ハルシネーションを抑えたとしても、質問に答えてくれないと 利⽤者が期待しないようになり、使ってもらえない 正確性が多少薄れても、意義のある回答を優先する 26 © DeNA Co., Ltd.
オープンチャット運⽤による副次的な効果 ● ⼈間に相談していたのと同じ流れで気軽に使える。利⽤の敷居が低い ● 他⼈の質問も⾒えるので他の利⽤者への知⾒の共有につながり、 回答がもたらす価値を⾼められる ● チャットAIの活⽤イメージを、 まだ利⽤していない利⽤者に具体例をもって啓蒙できる ● 利⽤者が疑問に思うことが何なのかをメンテナが把握できるため、 潜在的なニーズを把握できる 27 © DeNA Co., Ltd.
AIは⼿段であって⽬的ではない ハルシネーションの解決ではなく 現実の課題の解決を第⼀に考えた 28 © DeNA Co., Ltd.
”Rinchan”導⼊による効果 ● 約9割の問い合わせ対応のなかで、 Rinchan が活⽤されるようになった ● Rinchan だけで直接解決できない場合も、 メンテナによる訂正や追加質問によって、 少ない⼯数で実例を含む多くの情報を 提⽰して⾼品質‧⾼効率に解決できる ● 今まで遠慮して問い合わせをしてこなかった メンバーも質問を⾏うようになった。 敷居が下がり、相談の件数が増えた 29 15 件/月 の相談を “Rinchan” が解決 © DeNA Co., Ltd.
“Rinchan” がもたらした 開発現場の変⾰ 30 © DeNA Co., Ltd.
開発現場からのAI活⽤を進めたことによる変⾰ 全社展開される汎化されたAI活⽤ではなく 開発現場から業務と距離の近いAI活⽤を 推進したことで、 ライブラリ開発やメンバーの意識 に変⾰がおこった 31 © DeNA Co., Ltd.
ドキュメンテーションの価値の再定義 ● 正しい回答できない場合もドキュメント改善の機会になる ○ ドキュメントを⼈間が読んでも⾒落としていた事が洗い出される ○ 同時に利⽤できない機能の組み合わせがあっても、それが明⽰ されていないと出来ると思い込んで回答をしていまう、など ● ドキュメントの品質改善がAIの品質改善に直結する ○ ドキュメントに新たな事実や、曖昧さをなくす記述を追記する ことで、正しい回答が可能になることが⾮常に多い ● AI⾃⾝にドキュメントの品質改善のための回答をさせる ○ 新機能の概要からドキュメントの草稿を作らせる ○ ドキュメントの⽭盾や不明瞭な点を指摘させる 32 © DeNA Co., Ltd.
ドキュメンテーションの改善の好循環 ● ドキュメントの改善が、”Rinchan”の性能向上につながる ● ”Rinchan”の性能向上が、ドキュメントの改善につながる ● どちらもドキュメントの本質的な価値を⾼めることにつながる ドキュメントの 改善 33 ドキュメントの 価値の向上 “Rinchan” の 性能向上 © DeNA Co., Ltd.
内製ライブラリ開発の属⼈性の軽減 ● 内製ライブラリはメンテナの⼈数が不⾜して属⼈性が⾼まりがち ● ”Rinchan”を媒介にコンテキストの伝達が⾏われるように ○ あるエンジニアが“Rinchan”にMuscleの質問を繰り返すうちに、 “Rinchan”の回答のファクトチェックを⾏う側になった ● “Rinchan”と質の⾼いドキュメントがあれば、 新メンバーのキャッチアップも円滑に⾏えるようになる 34 © DeNA Co., Ltd.
トップダウンでのAI活⽤の課題 全社展開される汎化されたAI活⽤は、 どうしても課題との距離が遠くなる AIエンジニアに依存したAI活⽤は 効果も⼤きいがコストも⼤きく、 適⽤対象になる課題が限られる 35 © DeNA Co., Ltd.
DeNAで全社展開されているAI活⽤の例 ● Chat AI ○ SlackからGPT-4oと対話できるチャットAI ○ 社内ルールなどの全社知識について学習しており、 プロジェクト固有のドキュメントを学習させたものも利⽤可能 ● SAI ○ Difyをバックエンドとする、社内⽤AIプラットフォーム ○ ClaudeのArtifactsの様に指定したドキュメントを 学習させた上での質問が可能 36 © DeNA Co., Ltd.
利⽤者⽬線でのこれらの課題 ● RAGであるため、包括的な知識を要求する質問に答えるのが難しい ○ 開発現場の具体的な疑問に答えるには、 プロンプティングでコンテキストを伝える⼯夫が必要になる ● 開発者と利⽤者の距離が遠いため、うまく答えられなかったときに ”こんなもんか”と諦められてしまうことがある ● 結果として、活⽤できるのはうまく使える⼈に限られてしまう 37 © DeNA Co., Ltd.
開発現場に近い課題を数多く解決するには 開発現場の課題はコンテキストが深く、 ⽐較的⼩規模なものが、数多くある。 開発現場のエンジニアの⼿によって ボトムアップでのAI活⽤を⾏い、 低コストで多くの問題を解決する 38 © DeNA Co., Ltd.
In-Context LearningとボトムアップAI活⽤ ● 学習内容を低いレイテンシで更新することが可能なため 利⽤者の意⾒や傾向を直接みて、クイックに試⾏錯誤ができる ● 必要な前提知識が少なく、シンプルな構成で実装できる為、 ⼩規模な概念実証(PoC)から始める形で、実現性を気軽に検証でき、 低コストで実⽤に乗せることも可能になる。 ● 包括的な知識を簡単に学習させられるため、 深いコンテキストの問題の解決に向いている。 ● 社内のAI活⽤ではLLM利⽤のコスト対効果が⾮常に⾼い In-Context Learningでも、コストの問題が発⽣しない 39 © DeNA Co., Ltd.
“Rinchan”によって起こった意識変化 ● “Rinchan”を通して、LLMが解決できることの幅広さを、 多くのエンジニアが質量をもって実感できるようになった ● ゲーム開発現場での細かな課題をAIで解決するモチベーションが、 課題に直⾯している現場のエンジニアから直接出てくるように ○ AIの導⼊は難しい物ではなく、⾃分たちで出来る、やるべき事 だと感じてもらうことができた ○ “Rinchan” 以外の社内AIプロダクトの現場導⼊も、 以前より具体的に検討されるようになった 40 © DeNA Co., Ltd.
これから ● Rinchanの⼿法によるドメイン特化なAIは、 さまざまな領域で適⽤できる可能性が⾮常に⾼い ● 特定のプロダクト特化のRinchanの提供 ○ ⼊出⼒の活⽤範囲に注意しつつマスタデータや仕様書を理解させる ● CIでのレビューなど、チャット以外の形でのAI活⽤を推進 ● プロダクト側のエンジニアの⼿で ICLによる業務⽀援AIを構築できる枠組みを作る ○ ICLのプロンプト構築やデータコンバートを⽀援する ライブラリとしてRinchanのコアを社内提供 ○ Rinchan⾃体をforkしてすぐにデプロイできる、 派⽣しやすい作りにして横展開を容易にする 41 © DeNA Co., Ltd.
これから ● 意識の変⾰を現実の変⾰にまでもっていく ○ ICLを積極的に活⽤し、いま出ているアイデアを 現実のものにして、様々な課題を実際に解決する ○ これを様々なエンジニアが⾃ら⾏っていくような 組織⽂化を形成することこそがゴール 42 © DeNA Co., Ltd.
まとめ ● “Rinchan”は、社内ライブラリの複雑な仕様の理解をチャットAIを 通して⾏えるようにすることで、開発現場の効率化に貢献し、 ドキュメントのありかたや利⽤者の意識に様々な変⾰を起こした ● In-Context Learningは体系的な社内知識が必要な課題を解決する、 強⼒かつシンプルな⼿段になる ● 開発現場からのボトムアップのAI活⽤は、 現場に近い多様な問題をクイックに解決する 可能性を秘めている 43 © DeNA Co., Ltd.
Thank you for listening! 44 © DeNA Co., Ltd.