このプロジェクトの目的は、ユーザークエリに基づいてコンテキスト認識の推奨事項を提供するために、エージェントの検索された生成(RAG)アーキテクチャを活用する推奨エンジンを構築することを目的としています。 MVPは、コスト効率のためにオープンソーステクノロジーを利用しながら、モジュール性とスケーラビリティに焦点を当てています。
提案されたコードベース構造:
ragsearch/
├── __init__.py
├── retrieval/
│ ├── __init__.py
│ ├── structured.py # For databases (e.g., DuckDB,sqlLite,MongoDB)
│ ├── unstructured.py # For document loaders (e.g., PDF, Word, HTML)
│ ├── base.py # Abstract base class
├── generation/
│ ├── __init__.py
│ ├── langchain.py # LangChain-based generation
│ ├── llamaindex.py # LlamaIndex-based generation
│ ├── base.py # Abstract base class
├── fusion/
│ ├── __init__.py
│ ├── simple_fusion.py # Simple query-context fusion
│ ├── attention.py # Advanced fusion strategies
│ ├── base.py # Abstract base class
├── reranking/
│ ├── __init__.py # Factory for reranking components
│ ├── bm25_reranker.py # Reranking based on BM25 scores
│ ├── neural_reranker.py # Reranking with neural models
│ ├── base.py # Abstract base class
├── llms/
│ ├── __init__.py # Factory for LLMs
│ ├── openai.py # OpenAI wrapper
│ ├── cohere.py # Cohere wrapper
│ ├── huggingface.py # HuggingFace wrapper
│ ├── base.py # Abstract base class
├── utils/
│ ├── __init__.py
│ ├── logger.py # Logging utilities
│ ├── config.py # Configuration utilities
│ ├── data.py # Data utilities
│ ├── metrics.py # Evaluation metrics
├── tests/
│ ├── __init__.py
│ ├── test_retrieval.py
│ ├── test_generation.py
│ ├── test_fusion.py
│ ├── test_reranking.py
│ ├── test_llms.py
├── main.py # Main entry point
├── config.yaml # Configuration file
├── README.md # Project documentation
├── RAG.md # Documentation for Retrieval-Augmented Generation
├── RAG-FAQ.md # FAQ for Retrieval-Augmented Generation
検索された生成(RAG)は、大規模な言語モデルの出力を最適化するプロセスであるため、応答を生成する前に、トレーニングデータソースの外で権威ある知識ベースを参照します。大規模な言語モデル(LLM)は膨大な量のデータでトレーニングされており、数十億のパラメーターを使用して、質問への回答、言語の翻訳、文の完成などのタスクの元の出力を生成します。 RAGは、LLMの既に強力な機能を特定のドメインまたは組織の内部知識ベースに拡張しますが、すべてモデルを再訓練する必要はありません。これは、LLM出力を改善するための費用対効果の高いアプローチであるため、さまざまなコンテキストで関連性があり、正確で、有用なままです。
LLMSは、インテリジェントチャットボットおよびその他の自然言語処理(NLP)アプリケーションを動力とする重要な人工知能(AI)テクノロジーです。目標は、権威ある知識ソースを相互参照することにより、さまざまなコンテキストでユーザーの質問に答えることができるボットを作成することです。残念ながら、LLMテクノロジーの性質は、LLM応答に予測不可能性をもたらします。さらに、LLMトレーニングデータは静的であり、それが持っている知識に関するカットオフ日を導入します。
虚偽の情報を提示しても、答えがない場合。ユーザーが特定の現在の応答を期待している場合、時代遅れまたは一般的な情報を提示します。非認証ソースからの応答を作成します。異なるトレーニングソースが同じ用語を使用して異なることについて話すために、用語の混乱による不正確な応答を作成します。大規模な言語モデルは、現在のイベントに情報を提供することを拒否しているが、常にすべての質問に絶対的な自信を持って答えることを拒否する熱狂的な新従業員と考えることができます。残念ながら、そのような態度はユーザーの信頼に悪影響を与える可能性があり、チャットボットにエミュレートしたいものではありません!
Ragは、これらの課題のいくつかを解決するための1つのアプローチです。 LLMをリダイレクトして、権威ある事前に決定された知識ソースから関連情報を取得します。組織は生成されたテキスト出力をより強く制御し、ユーザーはLLMがどのように応答を生成するかについての洞察を得ています。
RAGテクノロジーは、組織の生成的なAIの取り組みにいくつかの利点をもたらします。
チャットボット開発は通常、基礎モデルの使用を開始します。 Foundation Models(FMS)は、一般化されていない幅広いデータで訓練されたAPIアクセス可能なLLMです。組織またはドメイン固有の情報のためのFMSの再訓練の計算および財務コストは高いです。 RAGは、LLMに新しいデータを導入するためのより費用対効果の高いアプローチです。生成的人工知能(生成AI)テクノロジーをより広くアクセスしやすく、使いやすくします。
LLMの元のトレーニングデータソースがお客様のニーズに適している場合でも、関連性を維持することは困難です。 RAGを使用すると、開発者は生成モデルに最新の研究、統計、またはニュースを提供できます。 RAGを使用して、LLMを直接接続して、ライブソーシャルメディアフィード、ニュースサイト、またはその他の頻繁に設定されている情報源を使用できます。 LLMは、ユーザーに最新の情報を提供できます。
RAGを使用すると、LLMはソースアトリメーションを使用して正確な情報を提示できます。出力には、引用またはソースへの参照を含めることができます。ユーザーは、さらなる明確化や詳細が必要な場合は、ソースドキュメントを自分で検索することもできます。これにより、生成AIソリューションに対する信頼と自信が高まります。
RAGを使用すると、開発者はチャットアプリケーションをより効率的にテストおよび改善できます。彼らは、LLMの情報源を制御および変更して、変化する要件や機能を超えた使用に適応することができます。また、開発者は、機密情報の検索をさまざまな認証レベルに制限し、LLMが適切な応答を生成するようにすることもできます。さらに、LLMが特定の質問のために誤った情報源を参照する場合、トラブルシューティングと修正を行うこともできます。組織は、より広範なアプリケーションのために、より自信を持って生成的なAIテクノロジーをより自信を持って実装できます。
RAGがなければ、LLMはユーザーの入力を取得し、訓練された情報、またはすでに知っている情報に基づいて応答を作成します。 RAGを使用すると、ユーザー入力を利用して新しいデータソースから情報を最初にプルする情報検索コンポーネントが導入されます。ユーザークエリと関連情報は両方ともLLMに与えられます。 LLMは、新しい知識とそのトレーニングデータを使用して、より良い応答を作成します。次のセクションでは、プロセスの概要を説明します。
LLMの元のトレーニングデータセット以外の新しいデータは、外部データと呼ばれます。 API、データベース、ドキュメントリポジトリなど、複数のデータソースから生じることがあります。データは、ファイル、データベースレコード、ロングフォームテキストなどのさまざまな形式で存在する場合があります。埋め込み言語モデルと呼ばれる別のAI手法は、データを数値表現に変換し、ベクトルデータベースに保存します。このプロセスは、生成AIモデルが理解できる知識ライブラリを作成します。
次のステップは、関連する検索を実行することです。ユーザークエリはベクトル表現に変換され、ベクトルデータベースと一致します。たとえば、組織の人事質問に答えることができるスマートチャットボットを検討してください。従業員が「年次休暇はいくらですか?」と検索した場合、このシステムは、個々の従業員の過去の休暇記録とともに、年次休暇政策文書を取得します。これらの特定のドキュメントは、従業員が入力しているものに非常に関連性があるため、返されます。関連性は、数学的ベクトルの計算と表現を使用して計算および確立されました。
次に、RAGモデルは、関連する取得データをコンテキストで追加することにより、ユーザーの入力(またはプロンプト)を増強します。このステップでは、迅速なエンジニアリング技術を使用して、LLMと効果的に通信します。拡張プロンプトにより、大規模な言語モデルはユーザークエリに対する正確な回答を生成できます。
次の質問は、外部データが古くなった場合です。検索のための現在の情報を維持するには、ドキュメントを非同期に更新し、ドキュメントの埋め込み表現を更新します。これは、自動化されたリアルタイムプロセスまたは定期的なバッチ処理を介して行うことができます。これは、データ分析における一般的な課題です。変化管理に対する違いのあるデータサイエンスアプローチを使用できます。
セマンティック検索は、LLMアプリケーションに膨大な外部知識ソースを追加したい組織のRAG結果を強化します。 Modern Enterprisesは、さまざまなシステムにわたってマニュアル、FAQ、調査レポート、カスタマーサービスガイド、人事文書リポジトリなどの膨大な情報を保存しています。コンテキストの検索は大規模に挑戦的であり、その結果、生成的な出力品質が低下します。
セマンティック検索テクノロジーは、異なる情報の大規模なデータベースをスキャンし、より正確にデータを取得できます。たとえば、「昨年の機械の修理にいくら費やされたか」などの質問に答えることができます。質問を関連ドキュメントにマッピングし、検索結果の代わりに特定のテキストを返すことができます。
RAGの従来のまたはキーワード検索ソリューションは、知識集約型タスクのために限られた結果をもたらします。また、開発者は、データを手動で準備する際に、単語の埋め込み、ドキュメントチャンク、その他の複雑さにも対処する必要があります。対照的に、セマンティック検索テクノロジーは知識ベースの準備のすべての作業を行うため、開発者は必要ありません。また、RAGペイロードの品質を最大化するために、関連性によって順序付けられた意味的に関連するパッセージとトークン単語を生成します。