「自治会DX💻!おじさんさんプログラマーが2日で作った!GoogleドライブをAI検索できるRAGツールの記録」
はじめに
※本記事ではコード開示はありません。2日で作ったものの調査、”おまけ”を見てください。
ここでは、私が2日間奮闘?したGoogleドライブをAI検索できるRAGツールについての内容をまとめます。RAGとはなんぞやを3日ほど前に知り、経験がほとんどない私が、どのようにしてこのツールを作り上げたのか、その過程や学びを共有します。いや、【知らないことを知らなかった。。】
タイトル詐欺ですが、ある程度技術用語は知ってて、日常でAI触ってないととても2日でできるようなものではありません。
成果物です。自治会用Googleフォルダの一部を探索。質問するとレスが返ってくるここは読み飛ばしてください。
(フォルダ内の40程のファイルからchrma.db作成。)
自治会DX推進おじさんの挑戦
自治会DX活動を推進レベル。の私がこのプロジェクトに取り組むにはハードルありそうでしたが、AIがなんとかしてくれるだろうと挑戦。
地域の情報を効率的に管理し、住民に提供するための手段として、AIを活用した検索ツールが必要だと感じたのです。その技術的なハードルはもはやAIが簡単に乗り越えてくれますし、地域の人々にとって使いやすいシステムを作ることに。
LLMとの出会い
といっても、LLMって何?をperplexityに聞いて、大して調べもせずに開始。なんとなく読んでると、これ、これまでのプログラミング経験では考えられなかったような、自然言語処理の力を借りることで、より直感的なインターフェースを実現できるのではないか。
なぜGoogleドライブAI検索ツールを作ろうと思ったのか
Googleドライブは多くの人にとって身近なツールですが、その中の情報を効率的に検索することは難しいと感じてます。過去の紙データを膨大にスキャンも、誰が見直すんだこのファイル。どの企業でも存在する”フォルダ検索の経験値だけで居残ってる古株社員”は自治会にはいないし。
必要情報など特にないだろうけど、何か聞かれた時に探せるようにだけしておこうかと。AIを活用した検索ツールを開発することで、情報の可視化とアクセスの向上を目指す!!
RAGツールとは?
3日前に知った。。
RAG(Retrieval-Augmented Generation)の基本概念
なぜこの技術が素人でも使えるのか
RAGは、複雑なアルゴリズムを背後に持ちながらも、ユーザーにとってはシンプルなインターフェースを提供します。これにより、プログラミングの経験が少ない私のような素人でも、効果的に活用できるとのこと。
実際の活用シーン
RAGツールは、さまざまなシーンで活用可能で、例えば、自治会の会議資料や住民からの問い合わせに対する迅速な応答など、年度末総会になったら、あれやこれや言ってくる人が出てくるので、その対策したいだけ。LINE公式で回答できるようにしようと思ってます。
開発環境と使用技術
使用した主要技術スタック
私がこのプロジェクトで使用した技術スタックについて説明します。Pythonを中心に、Google Drive APIやOpenAIのAPIを活用、データの取得や処理を行いました。これらの技術がどのように連携し、全体のシステムを構成しているのか。
開発に必要だったスキルセット
必要だったスキルセットについても言及します。プログラミングの基礎知識だけでなく、APIの使い方やデータ処理の技術も少し必要。
【Python基礎】
- Python 3.10以上の基本文法
- 非同期処理(async/await)
- 環境変数の扱い(python-dotenv)
- 例外処理とロギング
- コマンドライン引数の処理(argparse)
【Google API関連】
- Google Cloud Consoleの基本操作
- OAuth 2.0認証の仕組みと実装
- Google Drive APIの使用方法
- ファイル一覧取得
- ファイルダウンロード
- Google Docsのエクスポート
【ドキュメント処理】
- PDFファイル処理(PyPDF2)
- Wordファイル処理(python-docx)
- テキスト処理と正規化
- 文字エンコーディング処理
【LangChain】
- LangChainの基本概念
- テキスト分割(TextSplitter)
- ベクトルストアの操作
- RAGチェーンの構築
- プロンプトエンジニアリング
【ベクトルデータベース】
- ChromaDBの基本概念
- ベクトルストアの永続化
- 類似度検索の仕組み
- エンベッディングの基礎
【OpenAI API】
- API認証と設定
- Embeddingsモデルの使用
- GPTモデルの利用
- レートリミットとエラー処理
【開発ツール・環境】
- Git基本操作
- 仮想環境管理(venv)
- 依存パッケージ管理(pip)
- デバッグ技法
- ChatGPT(Plus Subscription)
- Cursor AI
【セキュリティ】
- API keyの安全な管理
- OAuth認証情報の扱い
- トークンの更新と管理
- アクセス権限の設定
【システム運用】
- ログ監視と解析
- エラーハンドリング
- パフォーマンス最適化
- ストレージ管理
シーケンス図で見る処理の流れ
これも基本設計としてAIに書いてもらった。
開発中に遭遇した課題と解決策
GoogleドライブAPIの認証
GoogleドライブAPIを利用する際の認証プロセスについて、特に、OAuth認証で”ウェブアプリケーション”として進める中で、トークン取得に関する部分に大きくつまづき、ここで半分以上時間取られました。
実際には”デスクトップ”に変更することで解決はしましたが、今後webアプリケーションにするには課題が残ります。
今回の作成物をバックエンドにして、API化するか。これはまたやる気が出たら。。
文書抽出の難しさ
DOCXファイルなどは難易度がそれほどでもないですが、自治会資料では、広告、ポスター、写真などもあります。pdfからはpypdf2を使って簡易で抽出しましたが、画像解析向けに【Google Cloud Vision API】に変更すればかなり精度は上がると思います。
ベクトル検索の実装
ベクトル検索の実装においても多くエラーが出ましたが、ほとんどAIに回答してもらったので、どのようなエラーだったか覚えてません。すいません。
期待以上の検索精度
実際に使用してみると期待以上の検索精度を実現。以前、GPTsなどに議事録などを複数ファイル登録して試しましたが、やはり回答精度はRAGの方がはるかに高いです。
今後の展望/課題
自治会でのAI活用可能性
自治会におけるAIの活用可能性についても考えますが、自治会員には実はこんなもの求めてない人が大半でしょう。
さらに個人情報や金額の入った機密情報もありますし、無闇にアプリケーションとしては開示できません。注意事項は色々AIに指摘されますが、こういったものはいくら便利になったからと言って、【まだ】人の最終判断が必要です。
対策としては個人情報保護規定や他の決まりごとも読み込ませ、そういったものを重要視したプロンプトにすれば、個人名的なものは出てこなくはなりました。
プロンプト次第ですが、臨機に応じchrma.dbを作成しなおした方が良いかもしれません。
結局文書内に個人名なきことの確認は人がやらなくてはならず、もう断念。
おじさん素人プログラマーからのメッセージ
AI活用というか、ここ1、2年はソフトバンクワールドでも孫さんが言ってましたが、”まさにAIゴールドラッシュ” ここで【波に乗る?】ことができなければ、今後その恩恵は受けられれないでしょうね。というか搾取される側になってしまいます。まぁ、何もしなくてもよくなる社会がくるなら、好きなことに没頭できるからいいんじゃないかと思ってます。
グランツーリスモやりながら実質8時間やそこらで完成したこのコード。pythonモジュール、.py ファイルx5で全体で850行程のコードをほとんどコピペで対応して、中身は8割わかってません。
【知らないことを知っている】でも、これくらいのことはできるとは恐ろしい時代になってきました。
これが、孫さんの言ってる”錬金術”なんでしょうか。。
ここまで、お付き合いいただきありがとうございました。スキ♡が多いようならコード開示の記事追加します。
おまけ
シーケンス図ベースで見積もってもらいました。