見出し画像

「自治会DX💻!おじさんさんプログラマーが2日で作った!GoogleドライブをAI検索できるRAGツールの記録」


はじめに

※本記事ではコード開示はありません。2日で作ったものの調査、”おまけ”を見てください。

ここでは、私が2日間奮闘?したGoogleドライブをAI検索できるRAGツールについての内容をまとめます。RAGとはなんぞやを3日ほど前に知り、経験がほとんどない私が、どのようにしてこのツールを作り上げたのか、その過程や学びを共有します。いや、【知らないことを知らなかった。。】

タイトル詐欺ですが、ある程度技術用語は知ってて、日常でAI触ってないととても2日でできるようなものではありません。 

成果物です。自治会用Googleフォルダの一部を探索。質問するとレスが返ってくるここは読み飛ばしてください。
(フォルダ内の40程のファイルからchrma.db作成。)

質問を入力してください: 今後の自治会を考えると?
INFO:root:Querying with question: 今後の自治会を考えると?
INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"
INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"

回答:
今後の自治会を考えると、いくつかの重要な課題と方向性が浮かび上がります。

まず、自治会の継続的な運営に関しては、現行の体制では任期が1年であるため、継続した検討が難しいという問題があります。このため、コミセン委員会や防災部会のような正式な組織として活動する必要があるとされています。
-----途中省略、500文字以上は回答。-------

、どの丁目でも参加できるはず」との見解が示されており、地域の連携を強化することが自治会の活性化につながるでしょう。

以上のように、今後の自治会は、組織の再構築、高齢化への対応、地域活動の活性化を通じて、より持続可能で参加型の運営を目指す必要があります。

自治会DX推進おじさんの挑戦

自治会DX活動を推進レベル。の私がこのプロジェクトに取り組むにはハードルありそうでしたが、AIがなんとかしてくれるだろうと挑戦。

地域の情報を効率的に管理し、住民に提供するための手段として、AIを活用した検索ツールが必要だと感じたのです。その技術的なハードルはもはやAIが簡単に乗り越えてくれますし、地域の人々にとって使いやすいシステムを作ることに。

LLMとの出会い

といっても、LLMって何?をperplexityに聞いて、大して調べもせずに開始。なんとなく読んでると、これ、これまでのプログラミング経験では考えられなかったような、自然言語処理の力を借りることで、より直感的なインターフェースを実現できるのではないか。

なぜGoogleドライブAI検索ツールを作ろうと思ったのか

Googleドライブは多くの人にとって身近なツールですが、その中の情報を効率的に検索することは難しいと感じてます。過去の紙データを膨大にスキャンも、誰が見直すんだこのファイル。どの企業でも存在する”フォルダ検索の経験値だけで居残ってる古株社員”は自治会にはいないし。

必要情報など特にないだろうけど、何か聞かれた時に探せるようにだけしておこうかと。AIを活用した検索ツールを開発することで、情報の可視化とアクセスの向上を目指す!!


RAGツールとは?

3日前に知った。。

RAG(Retrieval-Augmented Generation)の基本概念

RAGは、情報検索と生成を組み合わせた強力な手法です。この技術を用いることで、ユーザーが求める情報を迅速に取得し、さらにその情報を基にした自然な応答を生成することが可能になります。

詳細は調べてください。

なぜこの技術が素人でも使えるのか

RAGは、複雑なアルゴリズムを背後に持ちながらも、ユーザーにとってはシンプルなインターフェースを提供します。これにより、プログラミングの経験が少ない私のような素人でも、効果的に活用できるとのこと。

実際の活用シーン

RAGツールは、さまざまなシーンで活用可能で、例えば、自治会の会議資料や住民からの問い合わせに対する迅速な応答など、年度末総会になったら、あれやこれや言ってくる人が出てくるので、その対策したいだけ。LINE公式で回答できるようにしようと思ってます。

開発環境と使用技術

使用した主要技術スタック

私がこのプロジェクトで使用した技術スタックについて説明します。Pythonを中心に、Google Drive APIやOpenAIのAPIを活用、データの取得や処理を行いました。これらの技術がどのように連携し、全体のシステムを構成しているのか。

このシステムは、Google Drive上のドキュメント(PDF、DOCX、Google Docs)を活用したRAG(Retrieval Augmented Generation)システムです。

認証面では、Google Cloud ConsoleでOAuth 2.0クライアントを作成し、デスクトップアプリケーションとして認証を行います。
認証情報(client_id、client_secret)と更新トークン(refresh_token)は環境変数として.envファイルで管理され、セキュアな認証フローを実現。

ドキュメント処理では、Google Drive APIを使用して指定フォルダ内のファイルを取得し、ファイルタイプに応じて適切な方法でテキスト抽出を行います:
・PDFファイル:PyPDF2によるテキスト抽出
        抽出精度向上のため、Vision Cloudに変更する。
・DOCXファイル:python-docxによる解析
・Google Docs:Drive APIのexportメソッドでプレーンテキスト取得

抽出されたテキストは、LangChainのRecursiveCharacterTextSplitterで適切なサイズに分割され、OpenAI Embeddingsを使用してベクトル化されます。これらのベクトルはChromaDBに永続化され、後続の検索で再利用可能です。

質問応答では、ユーザーの質問に関連する文書をChromaDBから検索し、
それらをコンテキストとしてOpenAI GPT-4モデルに提供することで、
文書に基づいた正確な回答を生成します。

システムの更新管理は柔軟で、--refreshオプションによるベクトルストアの再構築や、--folder-idによる異なるフォルダの指定が可能です。
これにより、組織の文書ベースを定期的に更新しながら、
最新の情報に基づいた質問応答システムを維持できます。

このプログラムの概要を説明して。のClaude質問回答

開発に必要だったスキルセット

必要だったスキルセットについても言及します。プログラミングの基礎知識だけでなく、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割わかってません。
【知らないことを知っている】でも、これくらいのことはできるとは恐ろしい時代になってきました。

これが、孫さんの言ってる”錬金術”なんでしょうか。。

ここまで、お付き合いいただきありがとうございました。スキ♡が多いようならコード開示の記事追加します。

おまけ

シーケンス図ベースで見積もってもらいました。

いいなと思ったら応援しよう!