[DeepResearch]LLMアプリケーションの模範的な設計を知りたい
LLMアプリケーションを作ろうと思ったときに,プログラムをどんな感じで設計しようか迷いませんか?(ディレクトリどんな感じで切るかとか)。特に,私は職業柄実用的なアプリケーションのシステム設計には弱いので,プログラムを設計する際に参考になるようなコードベースをDeepResearchにを調査してもらいました。
以下回答です。
LangChainを用いたRAG検索・エージェント・チャットボットの模範コードベース
LangChainフレームワークを使ってRAG(Retrieval Augmented Generation)検索、エージェント(ツール使用による動的推論)、チャットボット対話機能を組み合わせたLLMアプリケーションの代表的なオープンソースプロジェクトを紹介します。それぞれPythonで構築されており、機能ごとにモジュール化された洗練された設計が特徴です。
GPT-4 & LangChain PDFチャットボット(mayooear/gpt4-pdf-chatbot-langchain)
GPT-4 & LangChain Chatbot for Large PDFは、大規模なPDFドキュメントに対する質問応答チャットボットのテンプレート実装です (GitHub - mayooear/ai-pdf-chatbot-langchain: AI PDF chatbot agent built with LangChain & LangGraph)。Next.js(TypeScript)によるフロントエンドとLangChain(Python)バックエンドを含むモノレポ構成で、ユーザがアップロードしたPDF等の文書を埋め込みベクトルに変換してSupabaseなどのベクトルDBに格納し、対話時に関連部分を検索してGPT-4などのLLMに与えて回答を生成します (GitHub - mayooear/ai-pdf-chatbot-langchain: AI PDF chatbot agent built with LangChain & LangGraph) (GitHub - mayooear/ai-pdf-chatbot-langchain: AI PDF chatbot agent built with LangChain & LangGraph)。LangChainのDocumentLoaderやテキスト分割・ベクトル格納・ConversationalRetrievalChainなどRAGに必要な一連のコンポーネントを備えており、LangGraphを用いたエージェント的な振る舞い(必要に応じ文書検索を行うチャットフロー)も組み込まれています (GitHub - mayooear/ai-pdf-chatbot-langchain: AI PDF chatbot agent built with LangChain & LangGraph) (GitHub - mayooear/ai-pdf-chatbot-langchain: AI PDF chatbot agent built with LangChain & LangGraph)。フロントエンドからはREST API経由でバックエンドのLangChainエージェントを呼び出し、質問に関連する文書片を取得して回答する流れになっています (GitHub - mayooear/ai-pdf-chatbot-langchain: AI PDF chatbot agent built with LangChain & LangGraph)。GitHubで15k以上のスターを獲得しており、RAG+チャットボット実装の事実上の標準例の一つです。また、このプロジェクトをベースに自社データ向けにカスタマイズすることで、ドキュメントQAチャットボットを迅速に構築できます。
LangChain-Chatbot(Python実装、Haste171)
上記のPDFチャットボットをPythonのみで再実装したのがHaste171氏の「LangChain-Chatbot」です (GitHub - Haste171/langchain-chatbot: AI Chatbot for analyzing/extracting information from data in conversational format.)。TypeScript/Next.js環境を使わず、バックエンドからUIまでPythonで構築されているため、シンプルにローカルで動作させることができます。このリポジトリではエンドポイント(APIサーバ)とハンドラ(質問応答処理)、UI、ユーティリティをディレクトリ毎に分離しており、機能ごとにモジュール化された明快な構成になっています (GitHub - Haste171/langchain-chatbot: AI Chatbot for analyzing/extracting information from data in conversational format.)。例えばhandlers/
にドキュメント埋め込み・検索やチャット履歴管理などのロジック、endpoints/
にFastAPIによるAPIルート、ui/
にStreamlitベースの簡易フロントエンド(ファイルアップロードやチャット画面)を実装しています。主要機能として、インタラクティブなファイル取り込みUI(PDF等をアップロードしてインデックス化)と、ソース参照付きのチャットUI(応答に引用元ドキュメントを表示、温度やベクトル検索トップk件数などパラメータ調整可能)を備えています (langchain-chatbot/README.md at main · Haste171/langchain-chatbot · GitHub)。実行手順も整備されており、リポジトリをクローン後にpoetry install
で依存関係を導入し、python3 startup.py
を起動するだけでローカルサーバが立ち上がります (langchain-chatbot/README.md at main · Haste171/langchain-chatbot · GitHub) (langchain-chatbot/README.md at main · Haste171/langchain-chatbot · GitHub)。環境変数ファイル(.env
)でOpenAI APIキーやベクトルDBのパスを設定するだけで動作し、設定次第でGPT-4などのOpenAIモデルを利用できます。※将来的にVicunaやAlpacaなどオフラインLLMへの対応も計画されており (langchain-chatbot/README.md at main · Haste171/langchain-chatbot · GitHub)、拡張性も考慮された設計です。
RAG Chatbot (Streamlit UI, 複数LLM対応) – AlaGrine/RAG_chatbot_with_Langchain
(GitHub - AlaGrine/RAG_chatabot_with_Langchain: A retrieval augmented generation chatbot powered by Langchain, Cohere, OpenAI, Google Generative AI and Hugging Face ) RAGチャットボットのLangChainコンポーネント構成図。上段では文書のロード・分割・ベクトル埋め込みを行いChroma等のベクトルストアに保存します。下段ではユーザ質問に基づき関連情報を検索(Retriever)し、LLM APIで回答を生成するフローが示されています (GitHub - AlaGrine/RAG_chatabot_with_Langchain: A retrieval augmented generation chatbot powered by Langchain, Cohere, OpenAI, Google Generative AI and Hugging Face )
AlaGrine氏のプロジェクトは、Streamlitによる簡易なWeb UI上でRAGチャットボットを動作させる実装です。ユーザはテキスト、PDF、CSV、Docx形式のドキュメントをアップロードでき、内部でLangChainを使ってそれらをベクトルデータベース(デフォルトではChromaを使用)に格納します (GitHub - AlaGrine/RAG_chatabot_with_Langchain: A retrieval augmented generation chatbot powered by Langchain, Cohere, OpenAI, Google Generative AI and Hugging Face )。質問に対してはアップロードされた関連文書を検索し、該当箇所をコンテキストとしてLLMに与えることで正確な回答を生成します (GitHub - AlaGrine/RAG_chatabot_with_Langchain: A retrieval augmented generation chatbot powered by Langchain, Cohere, OpenAI, Google Generative AI and Hugging Face )。文書ローダーからベクトルストア、ConversationalRetrievalChainを用いた対話型QAまで、RAGシステムの各コンポーネントを一通り確認しやすい構成になっています (GitHub - AlaGrine/RAG_chatabot_with_Langchain: A retrieval augmented generation chatbot powered by Langchain, Cohere, OpenAI, Google Generative AI and Hugging Face )。UIはStreamlit上に実装されており、サイドバーからLLMプロバイダを選択(OpenAIのGPT-3.5/GPT-4、Google Generative AIのGemini、HuggingFaceのMistralモデル等)してAPIキーやプロンプトパラメータを設定できます (GitHub - AlaGrine/RAG_chatabot_with_Langchain: A retrieval augmented generation chatbot powered by Langchain, Cohere, OpenAI, Google Generative AI and Hugging Face )。例えばGPT-4(OpenAI API)からGoogleのPaLM2(Gemini)までワンクリックで切り替えて試すことが可能です (GitHub - AlaGrine/RAG_chatabot_with_Langchain: A retrieval augmented generation chatbot powered by Langchain, Cohere, OpenAI, Google Generative AI and Hugging Face )。セットアップもシンプルで、Python 3環境下でpip install -r requirements.txt
実行後、streamlit run RAG_app.py
コマンドで起動できます (GitHub - AlaGrine/RAG_chatabot_with_Langchain: A retrieval augmented generation chatbot powered by Langchain, Cohere, OpenAI, Google Generative AI and Hugging Face )。軽量ながらマルチベクトルDB・マルチLLMに対応しており、RAG+チャットボットの全体像を学ぶのに適したリファレンス実装です。
OpenGPTs(LangChainチーム提供の総合プラットフォーム)
LangChain開発チーム自らが公開しているOpenGPTsは、OpenAIが提供する「カスタムGPT(Assistants)」機能に類似した汎用LLMアシスタント構築プラットフォームです (GitHub - langchain-ai/opengpts)。バックエンドはLangChain/LangGraph/LangServe/LangSmithといったLangChainエコシステムを駆使したPythonサーバ、フロントエンドはNext.js製のWeb UIで構成されています。大きな特徴は構成要素の柔軟な切り替えと組み合わせが可能な点で、使用するLLM(LangChain対応の60以上のモデルから選択)、プロンプトテンプレート(LangSmithでデバッグ可能)、与えるツール(100種類以上のLangChain組込ツールや独自ツールも追加可能)、ベクトルデータベース(60種以上の統合先に対応)、チャット履歴の保存先DBなどを自由に設定できます (GitHub - langchain-ai/opengpts)。さらに肝心の認知アーキテクチャ(LLMエージェントの思考フロー)も選択可能で、現時点で次の3種類のテンプレートが実装されています (GitHub - langchain-ai/opengpts) (GitHub - langchain-ai/opengpts):
-
Assistant(エージェント型) – 複数のツールを好きなだけ持たせることができ、LLM(GPT-3.5/4やClaude等の高性能モデル推奨)がどのツールをいつ使うか自律判断しながら回答します (GitHub - langchain-ai/opengpts)。ReAct形式でループ処理を行い、必要に応じ何度でもツール(計算やウェブ検索、ベクトル検索など)を呼び出して最終回答を導きます (GitHub - langchain-ai/opengpts)。柔軟性が非常に高い反面、モデルの性能に大きく依存し、思考ミスやツールの無駄呼び出しが発生しうるため信頼性確保が課題です (GitHub - langchain-ai/opengpts) (GitHub - langchain-ai/opengpts)。
-
RAG(RAGBot) – Retrieval Augmented Generationに特化したエージェントで、ユーザ質問ごとに必ず一度関連ドキュメント検索を行い、その結果をシステムメッセージ(プロンプト)に含めてLLMから回答を得るシンプルなフローです (GitHub - langchain-ai/opengpts)。Assistantに比べ決まった手順で動作するため安定性が高く、オープンソースの中小規模モデルでも動かしやすい利点があります (GitHub - langchain-ai/opengpts) (GitHub - langchain-ai/opengpts)。ただし毎回検索を行うため無関係な雑談には向きません。また一度の検索結果で回答するため、もし見つからない場合は誤答につながる点は注意が必要です (GitHub - langchain-ai/opengpts)。
-
Chatbot(スタンドアロン会話型) – 外部ツールや知識ベースを使わず、与えたシステムメッセージ(キャラクター設定など)とユーザからのチャット履歴だけで応答する最も単純なモードです (GitHub - langchain-ai/opengpts)。例えば「親切なアシスタント」や特定キャラクターになりきったチャットなど、純粋な対話エージェントとして機能します。外部知識が無いため質問への正確な回答には限界がありますが、創造的な会話や個性ある応答には十分実用的です (GitHub - langchain-ai/opengpts)。
OpenGPTsでは上記のようにユースケースに応じた認知アーキテクチャを選べる点が特徴で、設定ファイルやコードを通じてカスタムのアーキテクチャを定義することも可能です (GitHub - langchain-ai/opengpts) (GitHub - langchain-ai/opengpts)。Docker Composeによるワンクリックデプロイに対応しており、Postgresでのデータ永続化や認証機構も内蔵されています。まさに包括的なLLMアプリ開発基盤と言えるプロジェクトで、RAG検索+エージェント+チャットボットのあらゆる要素を網羅した最新の実装例です。
Discussion