Cloudflare
最近、次のような発表があった。 AutoRAG
サービスのオープンベータ。この完全にホストされたRAG(Retrieval-Augmented Generation)サービスは、この種のものとしては世界初である。 ラグRAGテクノロジーは、開発者が所有するデータから情報を取得し、それをラージ・ランゲージ・モデル(LLM)に供給することで、AIの応答精度を向上させ、より信頼性の高い、事実に基づいた応答を生成します。
RAGパイプラインの構築は、多くの開発者にとって退屈な作業を意味することが多い。データストア、ベクターデータベース、組み込みモデル、大規模言語モデル、カスタムインデックス作成、検索、生成ロジックなど、複数のツールやサービスを統合する必要がある。プロジェクトを開始するだけでも多くの「つなぎ」が必要であり、その後のメンテナンスはさらに困難である。データが変更されると、システムの関連性とパフォーマンスを維持するために、手作業でインデックスを作成し直し、埋め込みベクトルを生成しなければならなかった。質問すればインテリジェントな答えが返ってくる」という期待された体験は、多くの場合、脆弱な統合、糊のようなコード、継続的なメンテナンスからなる複雑なシステムに変わってしまう。
AutoRAG
目標は、この複雑さをなくすことです。数回クリックするだけで、開発者はエンド・ツー・エンドで完全に管理されたRAGパイプラインを手に入れることができる。このサービスは、データ・アクセス、自動チャンキング、エンベッディングから、ベクターの Cloudflare
な Vectorize
を利用することである。 Workers AI
質の高いレスポンスを生み出すプロセス全体。AutoRAG
データソースは継続的に監視され、バックグラウンドで更新のためのインデックスが作成されるため、AIアプリは人手を介さずに自動的に最新の状態に保たれる。この抽象化により、開発者はAIアプリの開発に集中することができる。 Cloudflare
の開発プラットフォーム上でよりスマートで高速なアプリケーションを構築する。
RAGアプリケーションの価値
大規模な言語モデル(Meta. Llama 3.3
)は強力だが、その知識はトレーニングデータに限られている。新しい、独自の、またはドメイン固有の情報を求められると、正確な答えを出すのに苦労することが多い。これは、システムのプロンプトを通じて関連情報を提供することによって助けることができるが、これは入力のサイズを大きくし、コンテキストウィンドウの長さによって制限される。もう一つのアプローチは、モデルを微調整することであるが、これにはコストがかかり、情報の更新に追いつくために継続的な再トレーニングが必要である。
RAGは、クエリーの時点で指定されたデータソースから関連情報を取得し、それをユーザーの入力クエリーと組み合わせ、その後、応答を生成するためにLLMに両方を提供する。このアプローチにより、LLMは開発者から提供されたデータに基づいて応答することができ、情報が正確で最新のものであることが保証される。その結果、RAGは、AI主導のカスタマーサービスロボット、社内ナレッジベースアシスタント、文書意味検索、および継続的に更新される情報ソースを必要とするその他のアプリケーションシナリオの構築に適している。微調整に比べ、RAGは費用対効果が高く、動的に更新されるデータを柔軟に扱うことができます。
AutoRAGの動作メカニズムの説明
AutoRAG
用いる Cloudflare
開発者プラットフォームの既存のコンポーネントは、ユーザーのためにRAGパイプラインを自動的に構成する。開発者は、RAGパイプラインを組み合わせるために独自のコードを書く必要はありません。 Workers AI
そしてVectorize
歌で応える AI Gateway
を作成するだけです。 AutoRAG
インスタンスを作成し、それをデータソース(たとえば R2
貯蔵バケツ)で十分である。
AutoRAG
その核となるのが、2つのプロセスだ:インデックス作成 歌で応える クエリ.
- インデクシング はバックグラウンドで実行される非同期プロセスである。このプロセスは
AutoRAG
インスタンスは作成後すぐに開始され、ジョブが完了するごとに新しいファイルや更新されたファイルを処理するラウンドロビン方式で自動的に実行される。インデックス作成プロセスでは、コンテンツはセマンティック検索に最適化されたベクトルに変換されます。 - 諮る は同期化されたプロセスであり、ユーザーが検索リクエストを送信することによってトリガーされる。
AutoRAG
クエリを受信すると、最も関連性の高いコンテンツがベクトル・データベースから検索され、このコンテンツとLLMを使用してコンテキストを考慮した応答が生成される。
インデックス作成プロセスの説明
データソースが接続されるとAutoRAG
次のステップは、データを抽出、変換し、ベクトルとして保存するために自動的に実行され、その後のクエリでセマンティック検索に最適化されます:
- データソースからファイルを抽出します:
AutoRAG
設定されたデータソースからファイルを直接読み込む。現在Cloudflare R2
PDF、画像、テキスト、HTML、CSV、その他多くの形式のドキュメントを扱うための統合。 - マークダウン変換: 利用する
Workers AI
Markdown変換機能は、すべてのファイルを構造化されたMarkdownフォーマットに変換し、異なるファイルタイプ間での一貫性を確保します。画像ファイルについてはWorkers AI
オブジェクトが検出され、その内容が視覚から言語への変換を通じてMarkdownテキストとして記述される。 - チャンキング: 抽出されたテキストは、検索の粒度を向上させるために小さなチャンクに分割される。
- 埋め込み: 各テキストブロックは
Workers AI
埋め込みモデルは、コンテンツをベクトル表現に変換するために処理される。 - ベクターストレージ: 生成されたベクターは、ソースの場所、ファイル名などのメタデータとともに、自動的に作成された
Cloudflare Vectorize
データベースでは
お問い合わせの流れ
エンドユーザーがリクエストを開始するとAutoRAG
以下の業務を調整する:
- クエリーリクエストを受け取る: クエリーのワークフローは次のように始まる。
AutoRAG
AI SearchまたはSearch APIエンドポイントにリクエストを送信する。 - クエリ書き換え(オプション):
AutoRAG
を使用するオプションを提供する。Workers AI
LLMは、元の入力クエリを書き換え、より効率的な検索クエリに変換し、検索の質を向上させる。 - クエリーの埋め込み: 書き換えられた(またはオリジナルの)クエリは、保存されているベクトルデータとの類似性比較を可能にするために、データ埋め込み時と同じモデルによってベクトルに変換される。
- ベクトル化 ベクトル検索: クエリ・ベクトルは、次のように一致した。
AutoRAG
関連Vectorize
データベースを検索して、最も関連性の高いベクターを見つける。 - メタデータとコンテンツ検索:
Vectorize
最も関連性の高いテキストブロックとそのメタデータを返す。同時に、最も関連性の高いテキストブロックとそのメタデータのリストをR2
対応する生のコンテンツがストレージバケットから取り出される。この情報はテキスト生成モデルに渡される。 - 応答生成:
Workers AI
テキスト生成モデルでは、検索されたコンテンツとユーザーの元のクエリを使用して、最終的な回答を生成する。
最終的な結果は、プライベートなユーザーデータに基づいた、正確で最新のAI主導の回答である。
ハンズオン:ブラウザ・レンダリングAPIによるRAGアプリケーションの迅速な構築
通常、スタートアップは AutoRAG
既存の R2
ストレージ・バケット。しかし、コンテンツ・ソースが動的なウェブ・ページで、フェッチする前にレンダリングする必要がある場合はどうでしょうか?Cloudflare
提供 ブラウザ・レンダリングAPI (現在正式に利用可能)がこの問題を解決する。このAPIにより、開発者はヘッドレス・ブラウザのインスタンスをプログラムで制御し、HTMLコンテンツのクロール、スクリーンショットの撮影、PDFの生成などの一般的なアクションを実行することができる。
以下のステップでは Browser Rendering API
ウェブサイトのコンテンツをクロールし、堆積させる R2
に接続する。 AutoRAG
サイトのコンテンツに基づくQ&A機能を有効にするため。
ステップ1:ウェブページをキャプチャしてR2にアップロードするWorkerを作成する
まず Cloudflare Worker
用途 Puppeteer
指定されたURLにアクセスし、ページをレンダリングし、HTMLの全コンテンツを R2
貯蔵バケット。すでに R2
バケツであれば、このステップは省略できる。
- 新しいワーカープロジェクトを初期化する。
browser-r2-worker
):npm create cloudflare@latest browser-r2-worker
オプション
Hello World Starter
属Worker only
平和TypeScript
. - 取り付け
@cloudflare/puppeteer
::npm i @cloudflare/puppeteer
- という名前のファイルを作成する。
html-bucket
R2ストレージバケット:npx wrangler r2 bucket create html-bucket
- ある
wrangler.toml
(またはwrangler.json
) ブラウザレンダリングとR2バケットバインディングを追加するための設定ファイル:# wrangler.toml compatibility_flags = ["nodejs_compat"] [browser] binding = "MY_BROWSER" [[r2_buckets]] binding = "HTML_BUCKET" bucket_name = "html-bucket"
- 次のスクリプトに置き換える。
src/index.ts
このスクリプトはPOSTリクエストからURLを受け取り、Puppeteerを使ってページのHTMLを取得し、R2に保存します:import puppeteer from "@cloudflare/puppeteer"; interface Env { MY_BROWSER: puppeteer.BrowserWorker; // Correct typing if available, otherwise 'any' HTML_BUCKET: R2Bucket; } interface RequestBody { url: string; } export default { async fetch(request: Request, env: Env): Promise<Response> { if (request.method !== 'POST') { return new Response('Please send a POST request with a target URL', { status: 405 }); } try { const body = await request.json() as RequestBody; // Basic validation, consider adding more robust checks if (!body.url) { return new Response('Missing "url" in request body', { status: 400 }); } const targetUrl = new URL(body.url); // Use URL constructor for parsing and validation const browser = await puppeteer.launch(env.MY_BROWSER); const page = await browser.newPage(); await page.goto(targetUrl.href, { waitUntil: 'networkidle0' }); // Wait for network activity to cease const htmlPage = await page.content(); // Generate a unique key for the R2 object const key = `${targetUrl.hostname}_${Date.now()}.html`; await env.HTML_BUCKET.put(key, htmlPage, { httpMetadata: { contentType: 'text/html' } // Set content type }); await browser.close(); return new Response(JSON.stringify({ success: true, message: 'Page rendered and stored successfully', key: key }), { headers: { 'Content-Type': 'application/json' } }); } catch (error) { console.error("Error processing request:", error); // Return a generic error message to the client return new Response(JSON.stringify({ success: false, message: 'Failed to process request' }), { status: 500, headers: { 'Content-Type': 'application/json' } }); } } } satisfies ExportedHandler<Env>;
- ワーカーを配置する:
npx wrangler deploy
- テストワーカー(例:キャプチャ
Cloudflare
このブログ記事のcurl -X POST https://browser-r2-worker.<YOUR_SUBDOMAIN>.workers.dev \ -H "Content-Type: application/json" \ -d '{"url": "https://blog.cloudflare.com/introducing-autorag-on-cloudflare"}'
そうしれいかん
<YOUR_SUBDOMAIN>
交換Cloudflare Workers
サブドメイン
ステップ 2: AutoRAG インスタンスの作成とインデックスの監視
の内容を入力する。 R2
バケツが作成されると AutoRAG
例
- ある
Cloudflare
コントロールパネルで、AI > AutoRAGに移動する。 - Create AutoRAG」を選択し、セットアップを完了する:
- を含む知識ベースを選択します。
R2
ストレージ・バケット(この場合はhtml-bucket
). - 埋め込みモデルを選択する(デフォルトを推奨)。
- レスポンスの生成に使用するLLMを選択する(デフォルト推奨)。
- を選択または作成する。
AI Gateway
モデルの使用状況を監視する。 - というのも
AutoRAG
インスタンスの命名(例my-rag
). - を認可するサービス API トークンを選択または作成します。
AutoRAG
自分のアカウントでリソースを作成し、アクセスする。
- を含む知識ベースを選択します。
- Create(作成)」を選択し、次の作業を開始する。
AutoRAG
例
作成後AutoRAG
を自動的に作成します。 Vectorize
データベースを作成し、データのインデックス作成を開始します。データベースを AutoRAG
の「概要」ページでインデックス作成の進捗状況を確認できます。イ ンデ ッ ク ス作成時間は、 デー タ ソ ース内の フ ァ イ ルの数 と 種別に よ っ て異な り ます。
ステップ3:テストとアプリケーションへの統合
インデックス作成が完了したら、クエリーを開始できる。インデックス作成は AutoRAG
インスタンス 遊び場 タブの中で、アップロードに基づいた質問、例えば「AutoRAGとは何ですか?
テストが満足のいくものであれば AutoRAG
アプリケーションに直接統合されています。もし Cloudflare Workers
AIバインディングを通じて直接呼び出せるアプリケーションを構築する AutoRAG
::
ある wrangler.toml
バインディングを入れる:
# wrangler.toml
[ai]
binding = "AI"
次にワーカーのコードで aiSearch()
メソッド(AIが生成した答えを取得する)または Search()
メソッドを使用します(検索結果のリストのみを取得します):
// Example in a Worker using the AI binding
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
// Assuming 'env' includes the AI binding: interface Env { AI: Ai }
if (!env.AI) {
return new Response("AI binding not configured.", { status: 500 });
}
try {
const answer = await env.AI.run('@cf/meta/llama-3.1-8b-instruct', { // Example model, replace if needed
prompt: 'What is AutoRAG?', // Simple prompt example
rag: { // Use the RAG configuration via the binding
autorag_id: 'my-rag' // Specify your AutoRAG instance name
}
});
// Or using the specific AutoRAG methods if available via the binding
// const searchResults = await env.AI.autorag('my-rag').Search({ query: 'What is AutoRAG?' });
// const aiAnswer = await env.AI.autorag('my-rag').aiSearch({ query: 'What is AutoRAG?' });
return new Response(JSON.stringify(answer), { headers: { 'Content-Type': 'application/json' }});
} catch (error) {
console.error("Error querying AutoRAG:", error);
return new Response("Failed to query AutoRAG", { status: 500 });
}
}
}
注:上記の Worker のコード例は、一般的な AI バインディングと RAG 機能の統合に基づいています。 AutoRAG
バインディングの呼び出しについては Cloudflare
最新かつ正確な使用法のための公式ドキュメント。
統合の詳細については AutoRAG
例の "Use AutoRAG "のセクションを参照するか、開発者のドキュメントを参照してください。
戦略的意義とデベロッパーの価値
AutoRAG
今回の発表で Cloudflare
開発者向けプラットフォームにおけるAI機能の統合をさらに深める。RAGパイプラインの主要コンポーネント(R2
, Vectorize
, Workers AI
, AI Gateway
)としてカプセル化されている。Cloudflare
開発者が自身のデータでスマートアプリを構築するハードルを大幅に下げる。
開発者向けAutoRAG
の主な価値利便性複雑なRAGインフラストラクチャを手作業で設定・維持する負担を軽減します。複雑なRAGインフラストラクチャを手作業で設定・維持する負担を軽減し、迅速なプロトタイプ作成が必要なチームや、MLOps専任のリソースが不足しているチームに特に適しています。RAGを完全に独自に構築する場合と比較すると、これはトレードオフの関係にあります。より迅速な開発と管理オーバーヘッドの削減のために、基本的な制御とカスタマイズの柔軟性を一部犠牲にすることになります。
同時に、これは Cloudflare
プラットフォーム戦略の延長:グローバルネットワークのエッジで、ますます包括的なコンピュート、ストレージ、AIサービスを提供し、緊密に統合されたエコシステムを形成する。開発者は AutoRAG
より深い統合を意味する Cloudflare
テクノロジー・スタックは、ある種のサプライヤー・ロックインを考慮しただけでなく、エコロジーにおけるサービス間の最適な統合のおかげでもある。
公開テスト期間中はAutoRAG
フリーランチしかし、索引付け、検索、機能強化などの計算処理には時間がかかる。 Workers AI
歌で応える Vectorize
開発者のような基礎となるサービスの利用は、これらの関連コストを気にする必要がある。現在、各アカウントが作成できるのは 10 オートラグ インスタンスで、各インスタンスは最大で 100,000ドキュメントこれらの制限は将来調整される可能性がある。
今後の開発ロードマップ
Cloudflare
示す AutoRAG
は今後も拡大を続け、たとえば2025年にはさらに多くの機能を導入する予定だ:
- より多くのデータソースの統合: とは別に
R2
このプランでは、WebサイトのURLの直接解析(ブラウザのレンダリング技術を使用)と、Webサイトへのアクセスをサポートしています。Cloudflare D1
およびその他の構造化データソース。 - 対応の質を高める: リランキングや再帰的チャンキングなどの組み込みテクニックを探求し、生成される回答の関連性と質を向上させます。
AutoRAG
開発の方向性は、ユーザーからのフィードバックやアプリケーションのシナリオに応じて継続的に調整される。
インスタント・エクスペリエンス
右 AutoRAG
ご興味のある開発者の方は Cloudflare
コントロールパネルのAI > AutoRAGセクションで、作成とトライアルを開始します。AI検索エクスペリエンスの構築、社内ナレッジ・アシスタントの構築、LLMアプリケーションの試用など、どのような用途にも対応します。AutoRAG
両者とも、「世界」を変える方法を提供している。 Cloudflare
グローバルネットワーク上でRAGプロジェクトを素早く開始する方法。より詳細な情報は 開発者向けドキュメント.一方、現在正式に入手可能な ブラウザ・レンダリングAPI こちらも興味深い。