「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > LlamaIndex.ts と Azure OpenAI を使用した RAG アプリの構築: はじめましょう!

LlamaIndex.ts と Azure OpenAI を使用した RAG アプリの構築: はじめましょう!

2024 年 11 月 8 日に公開
ブラウズ:907

AI が私たちの働き方やテクノロジーとの関わり方を形作り続ける中、多くの企業がインテリジェント アプリケーション内で自社のデータを活用する方法を模索しています。 ChatGPT や Azure OpenAI などのツールを使用したことがある場合は、生成 AI がどのようにプロセスを改善し、ユーザー エクスペリエンスを向上させることができるかについてはすでにご存知でしょう。ただし、真にカスタマイズされた関連性の高い応答を得るには、アプリケーションに独自のデータを組み込む必要があります。

ここで、検索拡張生成 (RAG) が登場します。これは、データ検索と AI を活用した応答を統合するための構造化されたアプローチを提供します。 LlamaIndex のようなフレームワークを使用すると、この機能をソリューションに簡単に組み込むことができ、ビジネス データの可能性を最大限に引き出すことができます。

Building a RAG app with LlamaIndex.ts and Azure OpenAI: Getting started!

アプリをすぐに実行して探索したいですか?ここをクリック。

RAG (検索拡張生成) とは何ですか?

検索拡張生成 (RAG) は、関連情報にアクセスし、独自のデータを統合するための検索コンポーネントを組み込むことで AI テキスト生成を強化するニューラル ネットワーク フレームワークです。これは 2 つの主要部分で構成されます:

  • Retriever: 大量の文書コーパスを検索して、指定されたクエリに関連する関連する文章や情報を見つける高密度の検索モデル (例: BERT に基づく)。
  • ジェネレーター: クエリと取得したテキストを入力として受け取り、一貫したコンテキストを強化した応答を生成するシーケンスツーシーケンス モデル (例: BART または T5 に基づく)。

取得者は関連するドキュメントを見つけ、ジェネレータはそれらを使用してより正確で有益な応答を作成します。この組み合わせにより、RAG モデルは外部の知識を効果的に活用でき、生成されるテキストの品質と関連性が向上します。

LlamaIndex は RAG をどのように実装しますか?

LlamaIndex を使用して RAG システムを実装するには、次の一般的な手順に従います:

データの取り込み:

  • SimpleDirectoryReader などのドキュメント ローダーを使用して、ドキュメントを LlamaIndex.ts にロードします。これは、PDF、API、SQL データベースなどのさまざまなソースからデータをインポートするのに役立ちます。
  • SentenceSplitter を使用して、大きなドキュメントを小さく管理しやすいチャンクに分割します。

インデックスの作成:

  • VectorStoreIndex を使用してこれらのドキュメント チャンクのベクトル インデックスを作成し、埋め込みに基づいた効率的な類似性検索を可能にします。
  • オプションで、複雑なデータセットの場合は、再帰的取得手法を使用して階層構造のデータを管理し、ユーザーのクエリに基づいて関連セクションを取得します。

クエリ エンジンのセットアップ:

  • asQueryEngine を、similarityTopK などのパラメータとともに使用して、ベクトル インデックスをクエリ エンジンに変換し、取得する上位ドキュメントの数を定義します。
  • より高度な設定の場合は、各エージェントが特定のドキュメントを担当し、トップレベルのエージェントが全体的な取得プロセスを調整するマルチエージェント システムを作成します。

取得と生成:

  • ユーザーのクエリに基づいて関連するドキュメント チャンクを取得する目的関数を定義して、RAG パイプラインを実装します。
  • RetrieverQueryEngine を使用して、実際の取得とクエリ処理を実行します。オプションで、CohereRerank などのツールを使用して取得したドキュメントを再ランク付けするなどの後処理ステップも実行します。

実践的な例として、Azure OpenAI を使用した完全な RAG 実装を示すサンプル アプリケーションを提供しました。

実践的な RAG サンプル アプリケーション

ここでは、LlamaIndex.ts (LlamaIndex の TypeScipt 実装) と Azure OpenAI を使用して RAG アプリケーションを構築し、それを Azure Container Apps 上のサーバーレス Web アプリとしてデプロイすることに焦点を当てます。

サンプルを実行するための要件

  • Azure Developer CLI (azd): バックエンド、フロントエンド、データベースを含むアプリ全体を簡単にデプロイするコマンドライン ツール。
  • Azure アカウント: アプリケーションをデプロイするには Azure アカウントが必要です。まずは、クレジット付きの無料の Azure アカウントを取得してください。

GitHub で入門プロジェクトを見つけることができます。必要に応じて自由に編集できるように、このテンプレートをフォークすることをお勧めします:

Building a RAG app with LlamaIndex.ts and Azure OpenAI: Getting started!

上位レベルのアーキテクチャ

入門プロジェクト アプリケーションは、次のアーキテクチャに基づいて構築されています:

  • Azure OpenAI: ユーザーのクエリを処理する AI プロバイダー。
  • LlamaIndex.ts: コンテンツ (PDF) の取り込み、変換、ベクトル化と検索インデックスの作成を支援するフレームワーク。
  • Azure Container Apps: サーバーレス アプリケーションがホストされるコンテナー環境。
  • Azure マネージド ID: 最高のセキュリティを確保し、資格情報や API キーを処理する必要がなくなります。

Building a RAG app with LlamaIndex.ts and Azure OpenAI: Getting started!

デプロイされるリソースの詳細については、すべてのサンプルで利用可能な infra フォルダーを確認してください。

ユーザーワークフローの例

サンプル アプリケーションには 2 つのワークフローのロジックが含まれています:

  1. データ取り込み: データがフェッチされ、ベクトル化され、検索インデックスが作成されます。 PDF や Word ファイルなどのファイルをさらに追加したい場合は、ここに追加する必要があります。

      npm run generate
    
  2. プロンプト リクエストの処理: アプリはユーザー プロンプトを受信し、Azure OpenAI に送信し、ベクトル インデックスを取得者として使用してこれらのプロンプトを拡張します。

サンプルの実行

サンプルを実行する前に、必要な Azure リソースがプロビジョニングされていることを確認してください。

GitHub コードスペースで GitHub テンプレートを実行するには、
をクリックするだけです。 Building a RAG app with LlamaIndex.ts and Azure OpenAI: Getting started!

Codespaces インスタンスで、端末から Azure アカウントにサインインします:

azd auth login

単一のコマンドを使用してサンプル アプリケーションをプロビジョニング、パッケージ化し、Azure にデプロイします:

azd up

アプリケーションをローカルで実行して試すには、npm の依存関係をインストールしてアプリを実行します:

npm install
npm run dev

アプリは、Codespaces インスタンスのポート 3000、またはブラウザの http://localhost:3000 で実行されます。

結論

このガイドでは、LlamaIndex.ts と Azure OpenAI を使用して、Microsoft Azure にデプロイされたサーバーレス RAG (Retrieval-Augmented Generation) アプリケーションを構築する方法を説明しました。このガイドに従うことで、Azure のインフラストラクチャと LlamaIndex の機能を活用して、データに基づいてコンテキストに応じて強化された応答を提供する強力な AI アプリケーションを作成できます。

この入門用アプリケーションで皆さんが何を構築するか楽しみにしています。最新のアップデートや機能を受け取るには、自由にフォークして GitHub リポジトリに「いいね!」してください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/azure/building-a-rag-app-with-llamaindexts-and-azure-openai-getting-started-3pgb?1 侵害がある場合は、study_golang にご連絡ください。 @163.com 削除
最新のチュートリアル もっと>
  • PDO_ODBC を使用して Access から UTF-8 アクセント付き文字を正しく取得する方法
    PDO_ODBC を使用して Access から UTF-8 アクセント付き文字を正しく取得する方法
    PDO_ODBC 経由で Access から UTF-8 アクセント記号付き文字を取得できませんPHP ODBC、特に PDO_ODBC 経由で Access データベースからデータを取得しようとすると、非標準です文字が正しくインポートされず、特殊文字の代わりに疑問符が表示されるなどの問題が発生する...
    プログラミング 2024 年 11 月 8 日に公開
  • Java の登場 新機能 ?
    Java の登場 新機能 ?
    Java 23 が正式にリリースされました。これは非 LTS (長期サポート) リリースです。短期間のバージョンではありますが、Java 23 にはエキサイティングな改善、バグ修正が満載されており、また、注意を払う必要がある削除された機能やオプションも含まれています。 新機能と、それが JDK 21...
    プログラミング 2024 年 11 月 8 日に公開
  • jQuery を使用してキーボードの Enter キーを検出する方法: 包括的なガイド
    jQuery を使用してキーボードの Enter キーを検出する方法: 包括的なガイド
    jQuery を使用したキーボード Enter キーの検出: 総合ガイドインタラクティブな Web アプリケーションを構築する場合、ユーザー入力の検出は非常に重要です。一般的なタスクの 1 つは、Enter キーの押下をキャプチャすることです。この記事では、jQuery を使用してこれをシームレスに...
    プログラミング 2024 年 11 月 8 日に公開
  • 文字列と文字列
    文字列と文字列
    弦 小文字の文字列は、JavaScript の プリミティブ データ型です。 この型で作成された文字列はオブジェクトではありませんが、JavaScript は自動的に文字列を String オブジェクトでラップします (これを「ボックス化」と呼びます)。 let imAString...
    プログラミング 2024 年 11 月 8 日に公開
  • C++ と Python で出力文字列を右揃えにする方法
    C++ と Python で出力文字列を右揃えにする方法
    右揃えで出力文字列をフォーマットするテキスト ファイルを操作する場合、データを一貫して揃えることで読みやすさと分析を向上させることができます。 C では、出力文字列を右揃えでフォーマットするにはどうすればよいのかという疑問が生じます。Python のフォーマット構文を使用すると、解決策は簡単です。l...
    プログラミング 2024 年 11 月 8 日に公開
  • ハクトーバーフェスト第 2 週
    ハクトーバーフェスト第 2 週
    2 週目では、問題の検索に費やす時間が減りました。今回は、Mattermost のドキュメント Web サイトのダーク モードで発生したバグで、特定のボタンの色が正しくなくなりました。 Docusaurus のことは知っています。他のドキュメントや、それをベースに構築されたコース教材サイトの一部を見...
    プログラミング 2024 年 11 月 8 日に公開
  • Python の Try/Except と If/Else: どちらのアプローチがより効果的ですか?
    Python の Try/Except と If/Else: どちらのアプローチがより効果的ですか?
    Try/Except と If/Else: どちらのアプローチが好ましいですか?Python で例外を扱う場合、開発者は多くの場合ジレンマに直面します。有効性をテストするか、アクションを試行して結果として生じる例外を処理するかどうか。この記事では、各アプローチのニュアンスを詳しく掘り下げ、意思決定に...
    プログラミング 2024 年 11 月 8 日に公開
  • Git リモート ブランチ
    Git リモート ブランチ
    今週、他の人のリポジトリに機能を追加する必要がありました。具体的には、CLI ツールのデフォルト パラメータを含むデフォルト設定 TOML ファイルをユーザーの $HOME フォルダ内に追加する必要がありました。 readMeMaker リポジトリに貢献しました: https://github.co...
    プログラミング 2024 年 11 月 8 日に公開
  • 単純な操作の場合、ストリームは常に従来のコレクションよりも遅いですか?
    単純な操作の場合、ストリームは常に従来のコレクションよりも遅いですか?
    Java 8 ストリームのパフォーマンスと従来のコレクションあなたは最近 Java 8 に挑戦し、そのストリーム API のパフォーマンスを従来のコレクションと比較する非公式のベンチマークを実施しました。テストには、整数のリストのフィルター処理、偶数の平方根の抽出、結果の Double リストへの保...
    プログラミング 2024 年 11 月 8 日に公開
  • 母国語を追加できる言語 API。
    母国語を追加できる言語 API。
    2016 年 4 月に、私は大好きな部族「イゲデ語」のための辞書プロジェクトを作成するというアイデアを思いつきました。ネイティブスピーカーではありません。 これが私にイゲデ言語から 5,000 語以上の単語を書いて英語に翻訳するきっかけになりました。これは間違いなく、私がこれまでに取り組んだ、ある...
    プログラミング 2024 年 11 月 8 日に公開
  • Playwright、TypeScript、JavaScript を使用した自動化
    Playwright、TypeScript、JavaScript を使用した自動化
    TypeScript を使用した劇作家 | JavaScriptのインストール Playwright は、Puppeteer チームとの協力による Microsoft の最新の Web ベースの API 自動化ツールです。Puppeteer は、DevTools プロトコルまたは WebDriver...
    プログラミング 2024 年 11 月 8 日に公開
  • Pythonの整数は何桁になるのでしょうか?
    Pythonの整数は何桁になるのでしょうか?
    整数内の桁数を数えるPython では、整数には長さという固有の概念がありません。ただし、整数の桁数を決定する必要がある場合は、いくつかの方法を検討できます。文字列に変換する1 つの簡単な方法は次のとおりです。整数を文字列に変換し、結果の文字列の長さをカウントします。例:length = len(s...
    プログラミング 2024 年 11 月 8 日に公開
  • Z-Index を使用すると、擬似要素がヘッダー要素の上に表示されるのはなぜですか?
    Z-Index を使用すると、擬似要素がヘッダー要素の上に表示されるのはなぜですか?
    Z-Index と擬似要素: ケーススタディCSS では、z-index プロパティは要素の積み重ね順序を指定します。ページで、どの要素が他の要素の「前」または「後ろ」に表示されるかを決定します。ただし、::before や ::after などの疑似要素に関しては、z-index との相互作用が単...
    プログラミング 2024 年 11 月 8 日に公開
  • タグを削除する前に頑固な HTML 特殊文字を削除するにはどうすればよいですか?
    タグを削除する前に頑固な HTML 特殊文字を削除するにはどうすればよいですか?
    頑固な HTML 特殊文字の除去strip_tags 関数は、HTML タグの削除には優れていますが、次のような厄介な HTML 特殊文字には対処できません。非改行スペースの場合は「©」、著作権記号の場合は「©」です。これは、クリーンな RSS フィードを作成する際の障害となる可能性があります。この...
    プログラミング 2024 年 11 月 8 日に公開
  • GoでAES ECBモード暗号化を復号化する方法?
    GoでAES ECBモード暗号化を復号化する方法?
    Go での AES ECB 暗号化AES ECB モード暗号化では、平文の各ブロックが個別に暗号化されますが、単純ですが安全ではない可能性のある暗号化です。方法。 Go では、次のコードを使用して AES ECB 復号化を実行できます:package main import ( "...
    プログラミング 2024 年 11 月 8 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3