【ITニュース解説】職場のAIチャットボットが羨ましかったので、自作してみた話(RAG+FastAPI+Streamlit)
2025年10月04日に「Qiita」が公開したITニュース「職場のAIチャットボットが羨ましかったので、自作してみた話(RAG+FastAPI+Streamlit)」について初心者にもわかりやすく解説しています。
ITニュース概要
職場のAIチャットボットの利便性に触発され、RAG、FastAPI、Streamlitといった技術を使い、AIチャットボットを自作した話。開発の経緯と具体的な構築方法がわかる実践的な記事だ。
ITニュース解説
職場に導入されたAIチャットボットの便利さに触発され、自作への挑戦が始まった。このチャットボットは、校内サーバーにある膨大な資料の中から、ユーザーの質問に関連する情報を探し出し、AIがその内容に基づいて回答を生成するというものだった。このような画期的なシステムを自分でも作ってみたいという強い思いが、今回のプロジェクトの出発点となった。
この自作チャットボットの核心にある技術が、「RAG(Retrieval Augmented Generation)」という仕組みである。一般的なAIチャットボットの基盤となる大規模言語モデル(LLM)は、学習したデータに基づいて回答を生成する。しかし、最新の情報や特定の組織内部の資料など、学習データに含まれていない内容については答えられなかったり、時には事実とは異なる、いわゆる「ハルシネーション」と呼ばれるでたらめな情報を生成してしまうという課題があった。RAGは、このLLMの限界を克服するためのアプローチだ。
RAGのプロセスは大きく二つのステップに分けられる。一つ目は「Retrieval(検索)」だ。ユーザーが質問を入力すると、その質問に関連性の高い情報を、外部の知識ベース(今回の場合は校内サーバーの資料など)から検索して取り出す。このとき、質問文と資料の内容を数値のベクトル(数値の並び)に変換し、ベクトル空間上で最も近い(つまり意味的に最も似ている)資料を効率的に探し出す「ベクトル検索」という技術が用いられる。資料をベクトルに変換する処理を「埋め込み(Embedding)」と呼び、その埋め込みを保存し、高速に検索できるようにする仕組みが「ベクトルデータベース」である。
二つ目は「Generation(生成)」だ。検索で得られた関連情報とユーザーの質問の両方を大規模言語モデルに渡し、その情報に基づいて回答を生成させる。これにより、LLMは自身が学習していない内容であっても、外部から与えられた正確な情報をもとに、より信頼性の高い回答を導き出すことができるようになる。つまり、RAGはLLMが「知識のない状態で想像で話す」のを防ぎ、「与えられた情報を正確に理解して話す」ようにアシストする役割を果たす。
システム全体の構成としては、ユーザーが直接操作する「フロントエンド」、裏側でデータの処理やAIとの連携を行う「バックエンド」、そして情報やデータを保存する「データベース」という三つの部分から成り立っている。
フロントエンドには「Streamlit」というPythonライブラリが採用された。Streamlitを使えば、Pythonのコードを書くだけで簡単にWebアプリケーションのユーザーインターフェース(UI)を作成できる。これにより、チャットの入力欄や履歴表示といった、ユーザーがチャットボットと対話するための画面を素早く構築することが可能となる。
一方、バックエンドには「FastAPI」が用いられている。FastAPIはPythonでWeb API(アプリケーションプログラミングインターフェース)を構築するためのフレームワークだ。APIは、フロントエンドからのリクエストを受け取り、データベースからデータを取得したり、大規模言語モデルに問い合わせたりといった処理を行い、その結果をフロントエンドに返す役割を担う。このシステムでは、ユーザーの質問を処理し、RAGの検索・生成プロセスを実行し、最終的な回答をフロントエンドに送り返すといった一連の複雑な処理をFastAPIが担当している。
RAGの実装をさらに効率化するために、「LangChain」というフレームワークも活用された。LangChainは、大規模言語モデルを活用したアプリケーション開発を支援するためのツール群であり、RAGのワークフローを簡単に構築するための機能を提供している。また、ベクトルデータベースとしては「ChromaDB」が使用され、これによって資料の埋め込みベクトルを効率的に管理・検索できるようになった。そして、実際に回答を生成する大規模言語モデルの機能は、「OpenAI API」を通じて利用された。
このプロジェクトを通じて得られる学びは非常に大きい。AIチャットボットの基本的な仕組みであるRAGの概念や実装方法を理解できるだけでなく、フロントエンドとバックエンドの連携、データベースの利用、APIの設計といった、システム開発における重要な要素を実践的に学ぶことができる。FastAPIやStreamlit、LangChainのようなモダンな技術に触れることで、Webアプリケーション開発のスキルと、大規模言語モデルを活用した新しいアプリケーション開発のスキルを同時に習得できる機会となる。自分自身で一からシステムを構築する経験は、問題解決能力やシステム全体を設計する思考力を養う上で非常に貴重な体験となるだろう。