この記事は CADDi プロダクトチーム Advent Calendar 2024 7 日目の記事です。
はじめに
こんにちは、CADDi の Analysisチームで図面解析をしている Osujo (@kaeru_nantoka) です。
みなさん LLM 使っていますか? 私は使っています。
CADDiでは、画像を含むリクエストに対応できるようになったことで、既存の機械学習モデルに加え、LLMを用いた解析タスクの検証を本格的に開始しました。
9月までは既存の機械学習モデルの安定運用のための基盤作成に携わっていました。
LLM については社内の勉強会や Kaggle コンペの Solution などでかろうじて追いかけていたくらいでした。
10月からはうってかわってガッツリ LLM の実用性検証を業務で行うことになりました。
ドキュメントを読んだり、実際に手を動かして検証を進める中で、Kaggle's 5-Day Gen AI Intensive Course
がよかったと X で話題になっていたのを見つけました。
今回は、この Kaggle's 5-Day Gen AI Intensive Course
の内容をキャッチアップしたので簡単に紹介します。
Kaggle の 5-day 生成AI 集中コースとは
2024年11月11日~15日に Kaggle 上で開催された、生成AI についての課題と講義からなるプログラムです。Kaggle と Google が共同で作成しました。
5日間、その日のお題に関するホワイトペーパーとハンズオン資料が共有されました。本来は事前登録者のみが参加できるプログラムでしたが、参加者有志が Kaggle フォーラムに講義資料とハンズオン資料を共有してくれたおかげで、後からでも学習することができました。
「コースに参加しました!」ではなく「キャッチアップしました」としたのは、私がこの有志の方々が共有してくれた資料を使って学習したためです。
ハンズオン資料は Kaggle Notebook で作成されており、インタラクティブに実行可能です。Google Cloud で API Key を発行し、Kaggle Notebook の Secret Manager に登録すれば、すべて実行できました。
感想
各プログラムについて、簡単に感想を書いていきます。
Day1: Foundational Models & Prompt Engineering
LLM の概要とプロンプトエンジニアリングについてでした。LLM の概要は、書籍や論文で既知の内容でした。プロンプトエンジニアリングの部分は、Gemini を使いながら、以下の内容を一通り体験できました。
学んだこと
- ハイパーパラメータの扱い
- プロンプトエンジニアリングの基礎
- 出力形式の制限方法(Json モード、Enum モード)
- zero-shot、few-shot
- Chain of Thought (CoT)、Reasoning and Acting (ReAct)
- コード生成と実行 (code_execution)
これらはドキュメントを読んで試してはいましたが、Kaggle Notebook でまとめて復習できたのは非常に有益でした。
Day2: Embeddings and Vector Stores/Databases
RAG の構築と埋め込みと類似度、分類モデルの作成についてでした。
RAG の構築
概念として知っていましたが、自分自身で実装したことがなかった部分でした。 この章では、ChromaDB を用いてデータベースを作成し、実際に RAG を構築しました。
類似度・分類モデルの作成
これは別の章に分けられていましたが、Gemini で埋め込みベクトルを作成した後は、Kaggle で経験済みの内容でした。
学んだこと
- 埋め込みベクトル用のモデル (
models/embedding-001
,models/text-embedding-004
) - 埋め込みベクトルのタスクタイプ (
retrieval_document
,retrieval_query
,semantic_similarity
) - ChromaDB:ベクトル保存と検索のための OSS ベクトルデータベース。初めて知りました。
- RAG の自作実装
Day3: Generative AI Agents
Gemini で関数呼び出しをする方法と LangGraphを用いた AI エージェントの作り方についてでした。
Gemini で関数呼び出しをする方法
この章では、ユーザーの自然言語による質問に対して、データベースに問い合わせを行い、その結果を用いて回答するチャットボットを作成しました。「DBにある商品のうち、最安値の商品は何ですか?いくらですか?」といった会話が可能です。
LangGraph を用いた AI エージェントの作り方
この章では、LangGraph を用いた AI エージェントを作成しました。
学んだこと
- 関数をツールとして渡すと、LLM はそれを回答生成に使用できる。SQL などの外部ツールへの問い合わせも可能。
- データベースの理解はスキーマ、操作は関数として実装される。
- LangGraph アプリの基本的な概念である State
- アプリ内のすべてのノードと遷移の間で渡される。
- Python 辞書(ここでは TypedDict)として定義できる。
- State はノードに渡されると新しい State になって返ってくる。
@tools
アノテーションで Python 関数をツールとしてアノテーションできる。
Day4: Domain-Specific LLMs
Gemini API の finetuning の方法についてでした。
学んだこと
- finetuning 用のモデル (
models/gemini-1.0-pro-001
,models/gemini-1.5-flash-001-tuning
) genai.create_tuned_model()
で簡単に finetuning できる。- DataFrame と
input_key
、output_key
を渡す。 - finetuning はチューニングジョブとしてキューに渡され、非同期で実行される。
- ジョブの実行状況を State として取得でき、ACTIVE になると finetuning 済みモデルが使用できる。
- モデルの finetuning は無料だが、finetuning 済みモデルの使用にはコストがかかる。
Day5: MLOps for Generative AI
MLOps for LLM についてでした。 Kaggle Notebook によるハンズオンはありませんでしたが、Google Cloud 上で LLM を用いたアプリケーションを作る場合のインフラ込みのアーキテクチャの実装例が GitHub で共有 されていました。
ロギング、モニタリング、CI/CD、IaC まで含まれており、LLM に限らず一般的な ML アプリケーションのアーキテクチャとして参考になるものでした。
まとめ
知識としては知っていたプロンプトエンジニアリングの各手法や RAG、LangGraph などを自分の手で実際に動かすとても良い機会になりました。また、Day5 で紹介されていたインフラや監視といった部分は for LLM でなくとも参考にできそうでした。 ちなみに、本エントリは Gemini-1.5-flash に推敲してもらいました。
世の中、大LLM時代になってきました。CADDi でも LLM の活用に向けた様々な検証を日々行なっています。一緒に MLモデルや開発基盤の作成をしたり LLM活用の検証に取り組む仲間も大募集中です。 少しでも興味をお持ちいただけましたら、以下の採用ページよりお問い合わせください。 カジュアル面談もお待ちしております!